La bibliothèque CSV est difficile à utiliser. Au moins, je suis difficile à utiliser. Écrivez-le sous forme de mémorandum. Je suis heureux que vous puissiez l'utiliser comme référence.
Transmettez une instance CSV :: Row. Je ne sais pas s'il existe un autre moyen. Je sens que ce n'est pas intuitif
row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
table = CSV::Table.new([row1])
pp table
#<CSV::Table mode:col_or_row row_count:2>
row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
table = CSV::Table.new([row1])
pp table.headers
["header1", "header2"]
Je pensais que [0] pourrait obtenir l'en-tête, mais j'ai obtenu la première ligne (Est-ce une ligne?) En excluant l'en-tête. Indice? Il semble que si vous spécifiez, vous pouvez obtenir une ligne au lieu d'un en-tête.
row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
table = CSV::Table.new([row1])
pp table[0]
pp table[1]
pp table["header1"]
#<CSV::Row "header1":"row1_1" "header2":"row1_2">
nil
C'était un comportement intuitif.
row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
table = CSV::Table.new([row1])
pp table["header1"]
["row1_1"]
headers = ["header1", "header2"]
row1 = CSV::Row.new(headers, ["row1_1", "row1_2"])
row2 = CSV::Row.new(headers, ["row2_1", "row2_2"])
table = CSV::Table.new([row1, row2])
CSV.open("test.csv", "w", headers: headers, write_headers: true, force_quotes: true) do |csv|
table.each { |row| csv << row }
end
$ cat test.csv
"header1","header2"
"row1_1","row1_2"
"row2_1","row2_2"
def save_csv_table(csv_table)
headers = csv_table.headers
CSV.open("test.csv", "w", { headers: headers, write_headers: true, force_quotes: true }) do |csv|
csv_table.each{ |row| csv << row }
end
end
Recommended Posts