我正在使用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
方法中将该字段用双引号包装,这样就会创建一个"Firstname Lastname"
字段传递给CSV,但CSV嘲笑了我的微不足道的尝试并输出了"""Firstname Lastname"""
。这是正确的操作,因为它对双引号进行了转义,所以这种方法不起作用。
然后我尝试在open
方法中设置CSV的:force_quotes => true
,这样就可以将所有字段都用双引号进行包装,但客户不喜欢那样做,我也预料到了。所以也没用。
我查看了Table和Row文档,没有找到任何可以让我访问“生成字符串字段”的方法,或者可以设置“对于第n个字段始终使用引号”标志的方式。
我即将深入源代码中查看是否有一些超级秘密的调整方法,或者是否有一种方法可以猴子补丁CSV并使其按照我的意愿工作,但想知道是否有人具有特殊知识或曾经遇到过这种情况。
是的,我知道我可以自己编写CSV输出,但我不喜欢重新发明轮子。此外,我也知道FasterCSV;它现在是Ruby 1.9.2的一部分,而我正在使用它,因此明确地使用FasterCSV对我来说没有任何特别之处。此外,我没有使用Rails,也没有重写它,所以除非你有一种使用Rails的小子集实现它的可爱方法,否则不要费心了。如果你没有读到这里就建议使用任何这些方式中的任何一种,我会给你投反对票。