【问题标题】:Removing additional quotes from strings in Haskell从 Haskell 中的字符串中删除额外的引号
【发布时间】:2011-08-18 01:54:52
【问题描述】:

嘿,在我的文件中,我有这样一行

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

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

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

我显然不能做 [putStr String] 因为 putStr 是 IO()

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

谢谢

【问题讨论】:

  • 与您之前的问题类似,stackoverflow.com/questions/5829985/… - 您将对show 的结果进行后处理以删除或添加您想要的字符
  • 您应该发布代码以确保人们理解您的问题。现在我的想法是你刚刚在:: [String] 上看到了show 的结果,并且担心转义字符;在这种情况下,“\”实际上并不是字符串的一部分,只是字符串的 GHCi 渲染。编写一个程序来执行您的操作并将结果输出到文件或终端。如果这不正常然后回到这里提出一个问题和一些显示问题的代码。
  • 与上面的一样,当我最后写它时,它会导致所有的'\'都被放入文件中。不希望发生这种情况。

标签: string list file haskell io


【解决方案1】:

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

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

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

然后你可以继续处理你想要的字符串。例如,通过将其拆分为空格,并删除额外的引号字符:

> map (filter (/='"')) (words s)
["Dave,","Zoe,","Amy,","Bill,","Ian,","Kevin,","Emma,","Sam,","Megan"]

查看列表处理的更多答案 for more examples

【讨论】:

  • 如果有两个词,例如“tom Baker”、“Dave Bla”
【解决方案2】:

如果这些字符串是用show 打印的,考虑到您之前的问题,它们可能是这样,请尝试用read 阅读它们。 read 函数与 show 相反,它取消了它的效果,即删除引号并取消转义转义字符。

编辑:

抱歉,我没有仔细阅读这个问题。看来你还没有任何问题。 :D 您提供的字符串显然是 ghci 的输出,而真正的字符串不包含任何斜杠。但是,我仍然假设您想阅读程序中的各个名称,为此您需要read。要使用它,您必须先用逗号分隔字符串。但是,如果任何名称本身包含逗号,这将变得非常重要。

我看到的最简单的解决方案是添加“[”,添加“]”,然后让read 函数处理所有内容。 像这样:

readList :: String -> [String]
readList str = read ("[" ++ str ++ "]")

假设您已使用来自previous questionshowList 打印它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多