解析ruby中的CSV字符串

loc*_*boy 7 ruby parsing

我有以下字符串 - 它不是以逗号分隔,但与csv数据集具有相同的效果:

response = "Date;Amount;Account;User\n2014-12-01;12.01;abcxyz;user1\n2014-12-01;10.09;fine;user2\n\r\n\t\t\r\n"
Run Code Online (Sandbox Code Playgroud)

我尝试运行以下内容来解析它:

CSV.parse(response, :col_sep => ";", :row_sep => :auto) 
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

CSV :: MalformedCSVError:未加引号的字段不允许\ r或\n

知道为什么会这样吗?

我也试response.gsub!("\t", "")过去看看是不是这个问题,但似乎并没有帮助.

Aru*_*hit 8

我得到了它的使用#strip:

require 'csv'

response = "Date;Amount;Account;User\n2014-12-01;12.01;abcxyz;user1\n2014-12-01;10.09;fine;user2\n\r\n\t\t\r\n"

CSV.parse(response.strip, :col_sep => ';') do |row|
  p row
end
Run Code Online (Sandbox Code Playgroud)

输出:

arup$ ruby a.rb
["Date", "Amount", "Account", "User"]
["2014-12-01", "12.01", "abcxyz", "user1"]
["2014-12-01", "10.09", "fine", "user2"]
Run Code Online (Sandbox Code Playgroud)


roo*_*oob 6

这将为您提供数组中的每一行。

CSV.parse( response.gsub( /[\r\t]/, '' ), col_sep: ";" )
=> [["Date", "Amount", "Account", "User"], ["2014-12-01", "12.01", "abcxyz", "user1"], ["2014-12-01", "10.09", "fine", "user2"], [], []]
Run Code Online (Sandbox Code Playgroud)

除非您想将所有行合并为一行,否则您需要将 留给\n解析器解释为新行。