我正在尝试将包含浮点数的字符串转换为列表。基本上,我有一个列出了一系列数组的文本文件,而且我不知道如何在haskell中收集它们。
输入:
"[0.0, 21.05263157894737, 450.56721805219945, 450.5625302466032]
[0.0, 42.10526315789474, 350.6536813941797, 346.7624393708003]
[0.0, 189.47368421052633, 447.5003638411328, 352.12736129109106]
[0.0, 210.5263157894737, 351.9493076378216, 347.65906596838636]"
只是一小段字符串。
所需的输出:
[0.0, 21.05263157894737, 450.56721805219945, 450.5625302466032]
[0.0, 42.10526315789474, 350.6536813941797, 346.7624393708003]
[0.0, 189.47368421052633, 447.5003638411328, 352.12736129109106]
[0.0, 210.5263157894737, 351.9493076378216, 347.65906596838636]
全部作为列表。
我已经尝试过并转换字符,但是一切都已经崩溃了。
我只列出了所有值
main = do
let args = "output.txt"
content <- readFile (args)
print(linesOfFiles)
任何输入表示赞赏。
答案 0 :(得分:2)
由于文件的行由换行符分隔,因此可以使用lines函数将其转换为字符串列表。然后可以在该列表的每个元素上使用read函数:
readListOfFloats :: String -> [Float]
readListOfFloats = read
main = do
let args = "output.txt"
content <- readFile args
print $ map readListOfFloats $ lines content
或者:
main = do
let args = "output.txt"
content <- readFile args
print $ map (read :: String -> [Float]) $ lines content
只要显式指定了read
函数的类型,这两个选项都将起作用。编译器无法推断出它,因为开发人员是唯一知道期望输入类型的开发人员。