【问题标题】:Ruby remove triple quotesRuby 删除三引号
【发布时间】:2015-11-23 18:20:18
【问题描述】:

我想像这样将带引号的字符串放入 csv 中:

csv << ["\"marks\"", marks]

其中标记是一个整数变量。 问题是当我打开 CSV 时,我得到了这个:

"""marks""",9

单引号也会发生同样的事情。 有没有办法用一组引号写出来?我不想再次打开文件并删除它们,我只想用一组引号打印一个带引号的字符串。我在 CSV 中想要的只是:

"marks",9

【问题讨论】:

  • 我尝试将它们作为单独的字符变量添加,但效果不佳
  • 你试过"'marks'"'"marks"'吗?
  • 同样的结果,也必须是双引号,否则输出不通过检查
  • 您可以通过加倍来转义 CSV 中的双引号,例如如果您将foo"bar 写入您的CSV,它将写为foo""bar。您使用的是什么 CSV gem?
  • 好吧,它只需要'csv'

标签: ruby csv set quotes


【解决方案1】:

这个可能有帮助:

marks = 5
csv=CSV.open("temp.csv", "w", {quote_char: " "})
csv << ["\"marks\"", marks]
csv.close

【讨论】:

  • 你不需要col_sep:";"
  • 手动引用东西是自找麻烦,所以在做的时候要小心。 Ruby 引用和 CSV 引用事物的方式完全不同。像test "string" 这样的字符串可能会炸毁你的 CSV 文件。
  • 写入不正确,输出为无效的 CSV 数据。这也应该是csv.close 而不是cv。我认为@mwp 在这里有正确的答案。
  • @tadman 我猜你使用的是单引号而不是转义。在这种情况下,是的,它是不正确的。
  • 如果您执行csv &lt;&lt; [ 'test "string"', 5 ],然后在结果上尝试CSV.parse,您会得到“第 1 行中的非法引用。(CSV::MalformedCSVError)”。简单地在该字符串的前面和结尾加上引号也不能解决它。您需要让 CSV 模块完成它的工作。
【解决方案2】:
marks = 5
csv = CSV.open('temp.csv', 'w', :force_quotes => true)
csv << ['marks', marks]
csv.close

这也会产生引用数值的不幸副作用,但它可能会让你到达你需要的地方。

$ cat temp.csv 
"marks","5"

【讨论】:

  • “5”也应该不带引号。
  • @tadman:原来的字符串中有一个带引号的字符串,因为他试图强制引用的值出现在 CSV 中。这实现了该结果,尽管也引用了数值。
  • @MaximPontyushenko:是的,正如我在回答中非常清楚地指出的那样。它没有明确作为问题中的硬性要求给出,如果它解决了主要问题,它可能不会成为 OP 的交易破坏者。这只是另一种选择。
  • 最初的问题似乎很模糊,但我同意你的解释。
  • @mwp 我基于 OP 的报价:'我在 CSV 中想要的只是:"marks",9'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2018-12-15
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多