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

时间:2012-04-21 12:28:42

标签: ruby csv

我正在从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

我尝试将其转换为使用字符串,而不是文件。但我没有成功。我一直使用&lt;&lt;&lt;&lt;&lt;&lt;操作

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

已经有一段时间了,但我终于弄清楚发生了什么。我上传的主机系统也可以处理文件末尾的换行符 - 就是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 

二进制模式修复了它:

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

2 个答案:

答案 0 :(得分:3)

如果您在编写CSV之前将CSV作为字符串,则可以使用String#chomp删除尾随换行符。

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

File.open('my.csv','w'){ |f| f.puts my_csv }

...然后你自己添加换行符,并可以通过以下方式避免使用换行符:

File.open('my.csv','w'){ |f| f.write my_csv }

如果您提供用于生成和编写CSV的实际代码,我们可以更精确地为您提供帮助。

答案 1 :(得分:0)

您只需使用sub!去除文件末尾的任何换行符:

# my_csv_contents contains all of the CSV data
my_csv_contents.sub!(/(\r?\n)*\z/, "")