我正在从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)
如果您在写入之前以字符串形式获取 CSV,则可以使用String#chomp
删除尾随换行符。
如果您使用以下方式写入文件:
\n\nFile.open(\'my.csv\',\'w\'){ |f| f.puts my_csv }\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6那么你自己添加一个换行符,并且可以通过以下方式避免它:
\n\nFile.open(\'my.csv\',\'w\'){ |f| f.write my_csv }\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您提供用于生成和写入 CSV 的实际代码,我们可以为您提供进一步、更准确的帮助。
\n