use*_*057 3 string haskell file input
在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].
Run Code Online (Sandbox Code Playgroud)
是的,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)
Run Code Online (Sandbox Code Playgroud)
这将获取您的示例文件,并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
Run Code Online (Sandbox Code Playgroud)
这将打印出已解析的元组.
这init部分是为了摆脱每一行末尾的尾随时期.