Ruby和写入CSV - 如何避免最后的空行?

pet*_*ept 5 ruby csv

我正在从Ruby生成CSV文件,并且接收数据的系统不能接受底部的空白行.

但是,在我添加了所有行(以CRLF结尾)之后,最后一行仍然具有CFLF,因此接收系统认为存在空白的lasy行.

我通过这个(hackish)代码打开并截断文件来解决它:

  size = File.size(filename)
  File.truncate(filename, size-3)
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了ruby CSV中的某些功能,如果它是最后一行,则不添加CRLF?

我编写CSV的代码是:

  csv = CSV.open(filename, "w", {:row_sep => "\r\n"})
  .. code to create an array of cols ..
  csv << cols
Run Code Online (Sandbox Code Playgroud)

我尝试将其转换为使用字符串,而不是文件.但我没有成功.我一直使用<<运算符得到一个错误.

更新:事实证明我有错误的问题......

已经有一段时间了,但我终于弄清楚发生了什么.我上传的主机系统也可以处理文件末尾的换行符 - 就是Ruby CSV输入了错误的换行符:\ r \n \n \n \n \n \n \n \n \n \n \n \n \n \n \实际读取!\ r \n!如果我写为文本文件,它就是这样做的.如果我写为二进制文件,问题就解决了.

如果其他人看到同样的问题,这是我的Ruby:

csv = CSV.open(filename, "w", {:row_sep => "\r\n"}) # actually writes \r\r\n 
Run Code Online (Sandbox Code Playgroud)

二进制模式修复它:

csv = CSV.open(filename, "wb", {:row_sep => "\r\n"}) # correctly writes \r\n
Run Code Online (Sandbox Code Playgroud)

Phr*_*ogz 3

如果您在写入之前以字符串形式获取 CSV,则可以使用String#chomp删除尾随换行符。

\n\n

如果您使用以下方式写入文件:

\n\n
File.open(\'my.csv\',\'w\'){ |f| f.puts my_csv }\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6那么你自己添加一个换行符,并且可以通过以下方式避免它:

\n\n
File.open(\'my.csv\',\'w\'){ |f| f.write my_csv }\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您提供用于生成和写入 CSV 的实际代码,我们可以为您提供进一步、更准确的帮助。

\n