Dies ist eine Konvertierungsmethode von einer durch Tabulatoren getrennten Datei (TSV-Datei) in Ruby in eine CSV-Datei mit Stückliste.
tsv_to_csv.rb
require 'csv'
#Erstellen Sie eine CSV-Datei und fügen Sie bom hinzu.
File.write("meibo.csv", "\uFEFF")
# 'meibo2.txt'Lesen Sie die obigen Informationen zeilenweise, machen Sie sie zu einem Array mit Split und fügen Sie sie zeilenweise in die CSV-Datei ein.
CSV.open("meibo.csv", "a", force_quotes: true ) do |meibocsv|
File.foreach('meibo.txt') do |student|
meibocsv << student.chomp.split("\t", -1)
end
end
Stückliste (Byte Order Mark) ist ein paar Datenbytes, die am Anfang von Text erreicht werden können, der im Unicode-Codierungsformat codiert ist. Excel versucht standardmäßig, eine CSV-Datei mit Shift-JIS zu öffnen, sodass UTF-8 verstümmelte Zeichen verursacht. Um dieses Problem zu umgehen, können Sie verstümmelte Zeichen verhindern, indem Sie Excel erkennen lassen, dass sie in UTF-8 geschrieben sind, indem Sie bei der Ausgabe in UTF-8 eine Stückliste hinzufügen. Die Stückliste ist wie folgt beigefügt.
File.write("meibo.csv", "\uFEFF")
Die zu lesende TSV-Datei lautet wie folgt.
meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
Ich habe meibo.txt gelesen, in dem tabulatorgetrennte Formatdaten geschrieben sind, aber ich möchte beim Lesen einer Zeile die Methode zum Schreiben einer Zeile verwenden. Nachdem Sie eine Zeile tabulatorgetrennter Daten in ein Array mit Split konvertiert haben, schreiben Sie sie unverändert in die CSV-Datei.
File.foreach('meibo.txt') do |student|
(CSV-Datei)<< student.chomp.split("\t", -1)
end
Wenn Sie den obigen Code in CSV.open einfügen, können Sie eine Zeile lesen und schreiben. Wenn Sie von einer durch Tabulatoren getrennten Datei in eine CSV-Datei wechseln, wird diese grundsätzlich zeilenweise verarbeitet. Dies soll verhindern, dass der Speicher überschritten wird, selbst wenn die Daten sehr groß sind, z. B. 10 Millionen Zeilen.
CSV.open("meibo.csv", "a", force_quotes: true ) do |meibo_csv|
File.foreach('meibo.txt') do |student|
meibo_csv << student.chomp.split("\t", -1)
end
end
Übrigens wird -1 an das zweite Argument (Limit) von split übergeben. Der Wert dieses zweiten Arguments ist standardmäßig 0, wodurch die leere Zeichenfolge am Ende des Arrays entfernt wird. Dies funktioniert nicht, wenn der TSV ein leeres Feld hat. Sie können es lösen, indem Sie -1 übergeben.
% ruby tsv_to_csv.rb
Eine CSV-Datei mit geschriebenen Daten wird generiert.
meibo.csv
"john","m","18"
"paul","m","20"
"alice","f","15"
"dabid","m","17"
"jasmin","f","17"
Richtig in eine durch Kommas getrennte CSV-Datei konvertiert.
Recommended Posts