Ruby 和写入 CSV - 如何避免最后出现空白行?

标签 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

我尝试将其转换为使用字符串,而不是文件。但是我没有成功。我一直在使用 << 运算符时出错。

更新:原来我问错了问题......

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

最佳答案

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

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

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

...然后你自己添加一个换行符,可以避免它:

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

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

关于Ruby 和写入 CSV - 如何避免最后出现空白行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258913/

相关文章:

java - OpenCSV 未使用注释映射 JavaBean

r - 如何编写dplyr组以分隔文件?

ruby-on-rails - 如何在 erb 模板中呈现数组的最佳方式?

c - ruby的rb_raise如何停止调用它的c函数的执行?

ruby - 使用 Ansible 安装 Bundler gem

python - 如何让这个过程更快?

c# - 在 C# 中比较两个 csv 文件

linux - 将字符串和列表的组合转换为 csv 文件

ruby - ruby 中的正则表达式以匹配字符第一次出现和最后一次出现之间的文本

ruby - 在本地安装 ruby​​-debug19