Haskell 中是否有任何快速的方法可以将这样的输入文件转换为相应的类型?例如一个函数,它接受一个字符串并产生一个Int
s 列表?还是我需要使用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].
是的,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
遍历所有行以获取所有行。如果有不同的类型,例如在您的示例中,您必须输入一些逻辑来确定每一行的类型,然后调用适当的函数来处理该类型。
为了建立 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
部分是摆脱每行末尾的尾随句点。