Schlagwort-Archive: CSV

Tool: xml2csv.pl

XML ist als Format für den Import und Export von Daten weit verbreitet, doch häufig ist es gar nicht so einfach, das XML-Format einer Anwendung in eine andere zu übernehmen. Hier ist CSV meisst der kleinste gemeinsame Nenner. xml2csv.pl wandelt die verschachtelt angeordneten Daten einer XML-Datei in eine Zeilen/spalten-orientierte CSV-Datei um, die dann (relativ) einfach in eine andere Anwendung import werden kann. Ich verwende es beispielsweise in Kombination mit mapcsv.pl zum Massenimport von Produktdaten in Magento. Das Tool ist in Perl geschrieben und nutzt den streambasierten XML::Parser zur XML-Verarbeitung.

Beim Aufruf übergeben Sie einfach die XML-Datei

$ xml2csv.pl <datei.xml>

Die Ausgabe erfolgt dann über stdout, kann also direkt über eine Pipe weiterverarbeitet, oder bei Bedarf in eine Datei umgeleitet werden.

Trenn- und das Quoting-Zeichen für die CSV-Felder sind fest im Code kodiert. Wer das über die Kommandozeile festlegen möchte, kann passende Optionen selbst ergänzen 😉

Ebenfalls fest kodiert ist ein (optionaler) Start-Tag, der die Konvertierung einschränkt und ausserhalb des Start-Tags liegende Daten ausspart.

Falls Sie dieses Tool nutzen wollen, schreiben Sie mir einfach eine E-Mail und ich schicke es ihnen zu. Wie immer erfolgt die Nutzung aber auf eigene Gefahr und unter Ausschluss jeglicher Garantie.

Tool: mapcsv.pl

Auch wenn sich XML und JSON großer Beliebtheit erfreuen, ist  CSV immer noch ein häufig eingesetztes Datenaustauschformat und oft der kleinste gemeinsame Nenner für den Austausch von Daten zwischen verschiedenen Anwendungen. Obwohl es so einfach aussieht, ist die Verarbeitung von CSV-Dateien überraschend komplex, wenn man sich mal intensiver damit beschäftigt. Doch das Parsing selbst soll hier nicht das Thema sein. Vielmehr möchte ich  mapcsv.pl vorstellen. Mit diesem einfachen (Kommandozeilen-)Tool können Sie eine CSV-Datei in eine andere CSV-Datei konvertieren. Ich benutze es beispielsweise für den Import von Daten aus einem Warenwirtschaftssystem in einen Magento-Shop, aber auch zur Generierung einfacher Zeitreihen für die Weiterverarbeitung in R. Das Tool ist in Perl geschrieben und nutzt Text::CSV_XS für das eigentliche CSV-Parsing.

Damit dieses Mapping funktioniert, übergeben Sie beim Aufruf des Programms neben der CSV-Quelldatei eine Mapping-Datei, die die gewünschte Abbildung beschreibt:

$ mapcsv.pl <map> <source.csv>

Die Ausgabe erfolgt über stdout, kann also direkt über eine Pipe weiterverarbeitet, oder bei Bedarf in eine Datei umgeleitet werden.

Ein einfaches Beispiel…

…sieht wie folgt aus:

$ mapcsv.pl stock.map products.csv >magento.stock.csv

products.csv enthält die im CSV-Format exportierten Produkte aus einem Warenwirtschaftssystem. Aus dieser Datei sollen drei Felder für den Import in einen Magento-Shop extrahiert werden. Die Datei stock.map beschreibt das gewünschte Mapping:

sku;Article_Color_Ean_Number
qty;Article_Color_Ean_Stock
max_sale_qty;Article_Color_Ean_Stock

Das WWS-Feld Article_Color_Ean_Number wird auf das Magento-Feld sku abgebildet. Der Lagerbestand Article_Color_Ean_Stock aus dem WWS wird für den Magento-Lagerbestand qty eingesetzt, und so weiter.

Darf’s ein bisschen mehr sein?

Neben diesem einfachen, direkten Mapping gibt es noch einige weitere Möglichkeiten. So kann man einem Zielfeld beispielsweise eine Konstante zuweisen:

tax_class_id;=2

oder ein Zielfeld einfach leer lassen:

backorders;

Auch einfache bedingte Zuweisungen sind möglich:

is_in_stock;?Article_Color_Ean_Stock > '0' '1'

schuhgroesse_damen_d;?Article_Sizerange eq 'Schuhgrößen Damen D' Article_Color_Ean_Size

Das Tool kennt eq, ne, lt, gt für alphanumerische, sowie < und > für numerische Vergleiche.

Die Möglichkeiten sind also vielfältig und das Tool selbst kann recht einfach an eigene Erfordernisse angepasst werden (so wäre etwa ein echter ternärer Operator denkbar, den ich mir mangels Zeit gespart habe).

Falls Sie dieses Tool nutzen wollen, schreiben Sie mir doch eine E-Mail und ich schicke es ihnen zu. Wie immer erfolgt die Nutzung aber auf eigene Gefahr und unter Ausschluss jeglicher Garantie.