如何在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|
  . . .