嘿,在我的文件中,我有一行像这样的
"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"
当处理它和hgetline将其更改为字符串时,它会导致它进入
""Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan""
我显然不能做[putStr-String],因为putStr是IO((
有没有办法摆脱这种东西。
感谢
假设您从包含以下内容的文件中读取行:
"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"
当通过读取时,例如readFile
或getLine
,这些引号也将在您的字符串中。
然后,您可以按照自己的意愿继续处理字符串。例如,通过将其拆分为空白,并删除额外的引号字符:
> map (filter (/='"')) (words s)
["Dave,","Zoe,","Amy,","Bill,","Ian,","Kevin,","Emma,","Sam,","Megan"]
有关更多示例,请参阅列表处理的进一步答案。
如果这些字符串是用show
打印的,考虑到您之前的问题,请尝试用read
读取它们。read
函数与show
相反,并取消其效果,即删除引号并取消转义转义字符。
编辑:
对不起,我没有仔细阅读这个问题。看来你还没有什么问题D您提供的字符串显然是ghci的输出,并且实际字符串不包含任何斜杠。然而,我仍然假设您想要读取程序中的各个名称,为此您需要read
。要使用它,您必须首先用逗号分隔字符串。但是,如果任何名称本身包含逗号,这就变得不重要了。
我看到的最简单的解决方案是在前面加上"[",附加"]",并让read
函数处理所有内容。像这样:
readList :: String -> [String]
readList str = read ("[" ++ str ++ "]")
这是假设您已经使用上一个问题
showList
打印了它们