Die CSV-Bibliothek ist schwierig zu verwenden. Zumindest bin ich schwer zu bedienen. Schreiben Sie es als Memorandum auf. Ich bin froh, wenn Sie es als Referenz verwenden können.
Übergeben Sie eine CSV :: Row-Instanz. Ich bin mir nicht sicher, ob es einen anderen Weg gibt. Ich finde es nicht intuitiv
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"]
Ich dachte, dass [0] den Header bekommen könnte, aber ich bekam die erste Zeile (heißt es Zeile?) Ohne den Header. Index? Wenn Sie angeben, können Sie anscheinend eine Zeile anstelle einer Kopfzeile abrufen.
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
Dies war ein intuitives Verhalten.
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