Ruby on rails CSV::格式错误DCSVERROR:新行必须

Ruby on rails CSV::格式错误DCSVERROR:新行必须,ruby-on-rails,ruby,ruby-on-rails-5.2,Ruby On Rails,Ruby,Ruby On Rails 5.2,正在尝试使用Ruby CSV解析此文件 然而,我得到了一个错误 CSV.open(file_name, "r", { :col_sep => "\t", :row_sep => "\n\r" }).each do |row| puts row end CSV::MalformedCSV错误:新行不能在同一行中 一, 使用:row\u sep=>:auto代替:row\u sep=>\n\r: CSV.openfile_name,r,{:col_sep=>\t,:row_se

正在尝试使用Ruby CSV解析此文件

然而,我得到了一个错误

CSV.open(file_name, "r", { :col_sep => "\t", :row_sep => "\n\r" }).each do |row|
    puts row
end
CSV::MalformedCSV错误:新行不能在同一行中 一,

使用:row\u sep=>:auto代替:row\u sep=>\n\r:

CSV.openfile_name,r,{:col_sep=>\t,:row_sep=>:auto}。每个do|row| 划船 终止 Windows行\u sep是\r\n,不是\r\n。但是,此CSV的格式不正确。使用十六进制编辑器查看它时,它似乎正在使用\r\r\n

它是以制表符分隔的

此外,它没有使用正确的报价,247行有600 B STREET STE。2204,所以您需要关闭引号字符

quote_char: nil, col_sep: "\t", row_sep: "\r\r\n"
末尾有一个额外的选项卡,每行以\t\r\n结尾。您也可以将其视为使用带有额外字段的\r\n行

或者您可以将其视为具有\t\r\n行且没有额外字段

quote_char: nil, col_sep: "\t", row_sep: "\t\r\r\n"
不管怎样,都是一团糟

我使用了一种方法,将文件作为文本和原始数据并排查看。这让我看到了这一行末尾真正的内容

87654321  0011 2233 4455 6677 8899 aabb ccdd eeff  0123456789abcdef                       
00000000: 3030 3030 3030 3139 3034 0941 4252 4148  0000001904.ABRAH
00000010: 414d 2053 4543 5552 4954 4945 5320 434f  AM SECURITIES CO
00000020: 5250 4f52 4154 494f 4e09 3030 3832 3934  RPORATION.008294
00000030: 3532 0933 3732 3420 3437 5448 2053 5452  52.3724 47TH STR
00000040: 4545 5420 4354 2e20 4e57 0920 0947 4947  EET CT. NW. .GIG
00000050: 2048 4152 424f 5209 5741 0939 3833 3335   HARBOR.WA.98335
00000060: 090d 0d0a 3030 3030 3030 3233 3033 0950  ....0000002303.P
          ^^^^^^^^^
是\t\r\r\n

或者,您可以使用打印行,任何不可见的字符都将显示出来

f = File.open(file_name)
p f.readline

"0000001904\tABRAHAM SECURITIES CORPORATION\t00829452\t3724 47TH STREET CT. NW\t \tGIG HARBOR\tWA\t98335\t\r\r\n"

:auto returns CSV::MalformedCSV错误:新行一定不在第3行。奇怪,我在Mac上,这能改变事情吗?好的,是的,在Mac上thorws\r\n返回CSV::MalformedCSV错误:新行一定不在第1行。你是如何识别它的,以便我将来可以排除故障的?@user2012677问得好!我用a来查看文件中的真实内容,再加上a。09是制表符,0d是\r,0a是\n。或者,您可以使用打印文件中的行,并在结尾显示\t\r\n。
f = File.open(file_name)
p f.readline

"0000001904\tABRAHAM SECURITIES CORPORATION\t00829452\t3724 47TH STREET CT. NW\t \tGIG HARBOR\tWA\t98335\t\r\r\n"