3

Haskell 中是否有任何快速的方法可以将这样的输入文件转换为相应的类型?例如一个函数,它接受一个字符串并产生一个Ints 列表?还是我需要使用getLine并解析字符串手动解析它?

10.
10.
[4, 3, 2, 1].
[(5,8,'~'), (6,4,'*'), (7,10,'~'), (8,2,'o')].
[4,0,9,4,7,5,7,4,6,4].
[4,10,0,6,6,5,6,5,6,2].
4

2 回答 2

7

是的,read功能。

readFile例如,一旦您读入文件,您就可以read将每一行都转换为您想要的类型。不过,你必须先摆脱这些时期。例如:

main = do
    text <- readFile "test.txt"
    let cases = lines text
        -- to get rid of the periods at the end of each line
        strs = map init cases
        lastLine = read $ last strs
    print $ show (map (+5) lastLine)

这将获取您的示例文件并Int从最后一行读取 s 列表,并将 5 添加到整个列表并打印它。

如果每一行都是相同的类型,您可以map read遍历所有行以获取所有行。如果有不同的类型,例如在您的示例中,您必须输入一些逻辑来确定每一行的类型,然后调用适当的函数来处理该类型。

于 2013-06-30T05:30:33.433 回答
5

为了建立 Jeff Burka 的答案,以下是您将用于特定文件的特定代码:

main = do
    [l1, l2, l3, l4, l5, l6] <- fmap (map init . lines) $ readFile "myFile.txt"
    let myVal :: (Int, Int, [Int], [(Int, Int, Char)], [Int], [Int])
        myVal = (read l1, read l2, read l3, read l4, read l5, read l6)
    print myVal

这将打印出解析的元组。

init部分是摆脱每行末尾的尾随句点。

于 2013-06-30T05:53:01.420 回答