嘿我的文件我有这样的一行
"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"
处理它时,hgetline将其更改为字符串,导致它转到
"\"Dave\", \"Zoe\", \"Amy\", \"Bill\", \"Ian\", \"Kevin\", \"Emma\", \"Sam\", \"Megan\""
我显然不能[putStr String]导致putStr是IO()
有没有办法摆脱\或其他东西。
感谢
答案 0 :(得分:2)
假设您从包含以下内容的文件中读取行:
"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"
当读入via时,例如readFile
或getLine
,这些引号也会在您的字符串中。
然后您可以继续处理您想要的字符串。例如,通过在空格上拆分它,并删除其他引号字符:
> map (filter (/='"')) (words s)
["Dave,","Zoe,","Amy,","Bill,","Ian,","Kevin,","Emma,","Sam,","Megan"]
请参阅列表处理f or more examples的进一步答案。
答案 1 :(得分:0)
如果这些字符串使用show
打印,考虑到您之前提出的问题,请尝试使用read
进行阅读。 read
函数与show
相反,并取消其效果,即删除引号并取消转义转义字符。
修改强>
抱歉,我没有仔细阅读这个问题。看来你还没有任何问题。 :d
你呈现的字符串显然是ghci的输出,真正的字符串不包含任何斜杠。但是,我仍然假设您要阅读程序中的个人姓名,您需要read
。要使用它,您必须首先在逗号上拆分字符串。但是,如果任何名称本身包含逗号,则这变得非常重要。
我看到的最简单的解决方案是预先添加“[”,追加“]”,让read
函数处理所有内容。
像这样:
readList :: String -> [String]
readList str = read ("[" ++ str ++ "]")
假设您使用previous question
中的showList
打印了它们