Es ist bekannt, dass die Methode zur Eingabe von Daten in die Rails-Datenbank darin besteht, eine Yaml-Datei für Fixtures zu erstellen und diese mit dem Befehl Rails einzugeben. In der Realität scheinen die Originaldaten jedoch häufig in Excel usw. aufbereitet und in CSV usw. verarbeitet zu werden. Ich habe auch Yaml Converter usw. ausprobiert, aber es hat nicht funktioniert, den Fixtures Key zu setzen, also habe ich es selbst gemacht. Ich habe das Escape-Zeichen überhaupt nicht verarbeitet. Wenn die Originaldaten so etwas verarbeiten, verarbeiten Sie es bitte entsprechend.
Angenommen, Sie haben eine solche CSV-Datei mit dem Spaltennamen in der ersten Zeile.
id,item,price
1, Apfel, 100
2, mikan, 80
3, Banane, 60
4, Melon, 2000
5, Erdbeere, 300
Sie benötigen eine solche Yaml-Datei, um mit Fixtures umgehen zu können.
data1:
id: 1
Artikel: Apfel
price: 100
data2:
id: 2
Artikel: Mikan
price: 80
data3:
id: 3
Artikel: Banane
price: 60
data4:
id: 4
Einzelteil: Melone
price: 2000
data5:
id: 5
Artikel: Erdbeere
price: 300
Die Stelle von "data1:" ist der Fixtures-Schlüssel, der nicht in der Datenbank angezeigt wird. Es scheint jedoch, dass Sie für jeden Datensatz einen eindeutigen Wert als Hash angeben müssen.
Das Skript sieht so aus. Nach der Konvertierung von Excel in CSV habe ich eine Stückliste in UTF-8 erhalten, sodass ich beim Öffnen der Datei eine Option habe.
!/use/bin/env ruby
filename = ARGV[0]
# Option zum Löschen der UTF-8-Stückliste
file = open(filename, 'r:BOM|UTF-8')
# Holen Sie sich die erste Zeile der CSV-Datei
column = file.gets.chomp.split(",")
# Fixtures Schlüsselpräfix (Daten) gefolgt von Zähler (num)
prefix = "data"
num = 1
str = ""
file.each do |line|
es sei denn, line.strip == "" ## Leerzeilen ignorieren
str += "#{prefix}#{num}:\n"
(0 .. column.length - 1).each do |i|
str += " #{column[i]}: #{line.chomp.split(",")[i]}\n"
end
str += "\n"
num += 1
end
end
print str
Es sieht so aus, wenn Sie von Shell aus laufen.
$ ./csv2yaml.rb fruits.csv > fruits.yml
Es gab kein Problem beim Konvertieren von CSV-Daten mit etwa 500 Zeilen, und es scheint in Ordnung zu sein, da sie von Fixtures importiert wurden. Ich konnte mehrere CSV-Dateien mit unterschiedlichen Spalten konvertieren.
Es kann einfacher sein, wenn Sie die Yaml-Bibliothek verwenden.
Recommended Posts