从Haskell中的字符串中删除其他引号

时间:2011-05-03 21:44:02

标签: string list file haskell io

嘿我的文件我有这样的一行

"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"

处理它时,hgetline将其更改为字符串,导致它转到

"\"Dave\", \"Zoe\", \"Amy\", \"Bill\", \"Ian\", \"Kevin\", \"Emma\", \"Sam\", \"Megan\""

我显然不能[putStr String]导致putStr是IO()

有没有办法摆脱\或其他东西。

感谢

2 个答案:

答案 0 :(得分:2)

假设您从包含以下内容的文件中读取行:

"Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"

当读入via时,例如readFilegetLine,这些引号也会在您的字符串中。

然后您可以继续处理您想要的字符串。例如,通过在空格上拆分它,并删除其他引号字符:

> 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打印了它们