LINUX.ORG.RU

И снова haskell - read и т.д.

 


0

2

Всем доброго здоровья.

Опять застрял. Есть файл с цифрами, записанными через пробел. как (правильно?) распарсить, чтобы получить вместо string - int?

Есть ли пример функции вырезания цифр из файла, разделенными пробелом, запятыми или другими разделителями?

Мои потуги застряли на

map (read :: String -> Int) $ words 
Но это не применимо, если предварительно содержимое порезать на строки.

import Data.List
import Data.List.Split

toInts :: String -> [Int]
toInts = map (read :: String -> Int). filter (not . null) . splitOneOf  " ,.;"
cyanide_regime
()
Ответ на: комментарий от fmdw

Парсить так парсить, или подробная инструкция, как развести cabal-hell на пустом месте:

{-# LANGUAGE OverloadedStrings #-}
import Data.Attoparsec.Char8 (decimal)
import Data.Attoparsec.Combinator (sepBy)
import Pipes.Parse
import Pipes.ByteString
import Pipes.Attoparsec
import System.IO

main = do
  numbers <- withFile "numbers.txt" ReadMode $ \h ->
                 parse (decimal `sepBy` " ") `evalStateT` fromHandle h
  print numbers
fmdw
()

Но это не применимо, если предварительно содержимое порезать на строки.

Почему?

KblCb ★★★★★
()
Ответ на: комментарий от fmdw

Спасибо, читаю. И за второй ответ, где разжевано - спасибо.

dodevich
() автор топика
Последнее исправление: dodevich (всего исправлений: 1)
Ответ на: комментарий от Aswed
Prelude> :{
Prelude| let allInt :: String -> [Int]
Prelude|     allInt str = do
Prelude|         (num,tail) <- reads str
Prelude|         num : allInt tail
Prelude| :}
Prelude> allInt "1 , 2"
[1]
qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.