3

我有一个 CSV 文件,其结构如下:

"customer_id";"customer_name";"quantity";
"id1234";"Henry";"15";

使用 Ruby 的标准 CSV 库进行解析:

csv_data = CSV.read(pathtofile,{
    :headers => :first_row,
    :col_sep => ";",
    :quote_char => '"'
    :row_sep => "\r\n" #setting it to "\r" or "\n" results in MalformedCSVError
})

puts csv_data.headers.count #4

我不明白为什么解析似乎会导致四列,尽管文件只包含三列。这不是解析文件的正确方法吗?

4

2 回答 2

6

每行;末尾的 表示另一个字段,即使没有值。

我要么删除尾随;的,要么在解析第四个字段时忽略它。

于 2013-04-15T14:40:28.087 回答
0

拖尾;是罪魁祸首。

您可以预处理文件,去除尾随;,但这会产生不必要的开销。

您可以使用以下方式对从 CSV 返回的数据数组进行后处理:

csv_data = CSV.read(...).map(&:pop)

这将遍历子数组,删除每个子数组中的最后一个元素。问题是它read不可扩展,因此您可能需要重新考虑使用它,而是使用CSV.foreach逐行读取文件,然后在返回给您时弹出最后一个值。

于 2013-04-15T14:57:22.863 回答