使用Ruby将列添加到CSV

时间:2014-07-14 14:02:57

标签: ruby csv

我正在尝试对CSV文件进行排序。

我从文件中读取数据并将其存储到哈希:

somecsv = 'somecsv.csv'
CSV_Hash = {}
CSV.foreach(somecsv) do |col1, col2, col3|
    CSV_Hash[col1] = col2, col3
end

然后我做了一些排序,并希望将数据写回CSV文件:

CSV.open('somecsv2.csv', "wb") do |csv|
    CSV_Hash.each do |row|
        csv << row
    end
end

示例数据是:

Filename      REG1     REG2
zFile.exe     A        E
bFile.exe     B        F
aFile.exe     C        G

我的预期输出是:

Filename      REG1     REG2
aFile.exe     C        G
bFile.exe     B        F
zFile.exe     A        E

实际输出是:

Filename      ["REG1, REG2"]
aFile.exe     ["C, G"]
bFile.exe     ["B, F"]
zFile.exe     ["A, E"]

当我只有两列时,我的代码工作正常,我理解为什么它不适用于第三列。我只是不知道在哪里可以分开第三栏。

如果这有帮助,这就是输出到控制台时哈希的样子:

{"Filename"=>["REG1", "REG2"], "aFile.exe"=>["C", "G"], "bFile.exe"=>["B", "F"], "zFile.exe"=>["A", "E"]}

1 个答案:

答案 0 :(得分:2)

CSV编写器需要一个扁平数组,而不是元组string => array

- csv << row
+ csv << row.flatten

希望它有所帮助。