我正在从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
答案 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/, "")