【发布时间】:2011-01-31 19:01:42
【问题描述】:
我正在使用 Ruby 的内置 CSV 生成一些 CSV 输出。一切正常,但客户希望输出中的名称字段包含双引号,因此输出看起来像输入文件。例如,输入看起来像这样:
1,1.1.1.1,"Firstname Lastname",more,fields
2,2.2.2.2,"Firstname Lastname, Jr.",more,fields
CSV 的输出是正确的,如下所示:
1,1.1.1.1,Firstname Lastname,more,fields
2,2.2.2.2,"Firstname Lastname, Jr.",more,fields
我知道 CSV 做的事情是正确的,它不会仅仅因为它嵌入了空白而双引号第三个字段,而是在它嵌入逗号时用双引号包裹该字段。为了帮助客户感到温暖和模糊,我想做的是告诉 CSV 始终对第三个字段进行双引号。
我尝试在我的 to_a 方法中将字段用双引号括起来,这会创建一个传递给 CSV 的 "Firstname Lastname" 字段,但 CSV 嘲笑我的微不足道的尝试并输出 """Firstname Lastname"""。这是正确的做法,因为它转义了双引号,所以这不起作用。
然后我尝试在open 方法中设置CSV 的:force_quotes => true,该方法输出的双引号会按预期包含所有字段,但客户不喜欢这样,这也是我的预期。所以,那也没用。
我查看了 Table 和 Row 文档,似乎没有任何东西可以让我访问“生成字符串字段”方法,或者设置“对于字段 n 始终使用引用”标志的方法。
我将深入研究源代码,看看是否有一些超级秘密的调整,或者是否有办法对 CSV 进行猴子补丁并按照我的意愿弯曲它,但想知道是否有人有一些特殊知识或有之前遇到过这个。
而且,是的,我知道我可以推出自己的 CSV 输出,但我不想重新发明经过充分测试的轮子。而且,我也知道 FasterCSV;这现在是我正在使用的 Ruby 1.9.2 的一部分,所以明确地使用 FasterCSV 并没有给我带来什么特别的东西。另外,我没有使用 Rails,也不打算在 Rails 中重写它,所以除非你有一种使用 Rails 的一小部分实现它的可爱方法,否则不要打扰。我会否决任何使用这些方式的建议,只是因为你没有费心读到这里。
【问题讨论】:
-
这是迄今为止我发现的最简单的方法:superuser.com/a/318421/314320