【发布时间】:2012-04-21 12:28:42
【问题描述】:
我正在从 Ruby 生成一个 CSV 文件,而正在接收数据的系统无法接受底部的空行。
但是,在我添加了所有行(以 CRLF 结尾)之后,最后一行仍然有 CFLF,所以接收系统认为有一个空白的 lasy 行。
我通过执行这个(hackish)代码来打开和截断文件来解决它:
size = File.size(filename)
File.truncate(filename, size-3)
我是否缺少 ruby CSV 中的某些功能,如果它是最后一行,则不添加 CRLF?
我编写 CSV 的代码是:
csv = CSV.open(filename, "w", {:row_sep => "\r\n"})
.. code to create an array of cols ..
csv << cols
我尝试将其转换为使用字符串,而不是文件。但我没有成功。使用
更新:原来我问错了问题...
已经有一段时间了,但我终于弄清楚发生了什么。我上传的主机系统也可以处理文件末尾的换行符 - Ruby CSV 输入了错误的换行符:\r\r\n instread of \r\n!如果我写为文本文件,它会这样做。如果我写成二进制文件,问题就解决了。
如果其他人看到同样的问题,这是我的 Ruby:
csv = CSV.open(filename, "w", {:row_sep => "\r\n"}) # actually writes \r\r\n
二进制模式修复它:
csv = CSV.open(filename, "wb", {:row_sep => "\r\n"}) # correctly writes \r\n
【问题讨论】:
-
在我看来接收系统坏了。
-
好点。虽然我无法控制.. 但我会针对它提交一个错误,
-
生成 CSV 的代码是什么?具体来说,您是如何将其写入文件的?