如何解决如何在Ruby中检测和处理不同的EOL?
| 我正在尝试处理可以使用CF或LF作为EOL标记生成的CSV文件。当我尝试读取文件时infile = File.open(\'my.csv\',\'r\')
while line = infile.gets
...
整个20MB文件作为一行读入。
如何正确检测和处理?
TIA
解决方法
我将处理文件,将输入标准化,然后将其输入CSV:
raw = File.open(\'my.csv\',\'rb\',&:read).gsub(\"\\r\\n\",\"\\n\")
CSV.parse(raw) do |row|
# use row here...
end
由于Windows Ruby上的文件读取速度较慢,因此上述方法使用File.open
而不是IO.read
。
, 如有疑问,请使用正则表达式。
> \"how\\r\\nnow\\nbrown\\r\\ncow\\n\".split /[\\r\\n]+/
=> [\"how\",\"now\",\"brown\",\"cow\"]
所以,像
infile.read.split(/[\\r\\n]+/).each do |line|
. . .
end
现在,事实证明标准库CSV已经可以理解混合行的结尾,因此您可以执行以下操作:
CSV.parse(infile.read).each do |line|
. . .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。