我正在使用Ruby生成一个CSV文件,但接收数据的系统不能接受底部的空行。
然而,在我添加所有以CRLF结尾的行后,最后一行仍然有CFLF,因此接收系统认为有一个空白的最后一行。
我通过使用以下(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 而不是 \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