Die Tage hatte ich auf der Arbeit eine „kleines“ Problem. Ein Kunde gab mir 80’000 MARCXML Datensätze, die alle von einem SRU Gateway stammten. Der SRU Gateway packte die Datensätze so, dass zwei <record>-Tags aufeinander folgen und mein üblicher weg, die Daten mit Catmandu automatisierte zu konvertieren schlug deswegen fehl. Catmandu anzupassen, war mir für diesen „one off“ Job jetzt zu viel Stress, besonders da die Daten durch MarcEdit (von Terry Rees) gut geöffnet und verarbeitet werden konnte. 80’000 Datensätze durch MarcEdit jagen – ich hab was besseres zu tun, oder?

Eigentlich nicht, denn MarcEdit kommt mit einer Befehlszeile daher und das öffnete den Weg der automatisierten Konvertierung der Daten. Leider gibt es die Befehlszeile noch nicht nativ für OS X. Also was tun?

Mono

Mono ist eine OpenSource Implementation von Microsoft’s .NET Framework, der auf dem ECMA Standards für C# und der Common Language Runtime aufbaut. Mono gibt es für OS X, Linux und Windows. Mono ist schnell installiert und danach kann man .NET Apps über den Terminal in OS X aufrufen. Unter mono-project.com gibt es mehr Informationen und einen Download Link.

MarcEdit

Unter MarcEdit Linux Installation Instructions erklärt der Entwickler, wie man MarcEdit unter Linux zum Laufen bringt. Für OS X gibt es ja einen eigenen Port, aber halt ohne Befehlszeile. Man installiert. Im Ende ist es super einfach.

Wenn Du mehr Details möchtest…

Mono kommt mit einem typischen OS X Installer daher, hier gibt es nicht viel einzurichten, es braucht halt 5 Minuten Zeit. Sobald Mono installiert ist, kann man in der OS X Befehlszeile mono eingeben und bekommt die Hilfeseite von Mono angezeigt. Das Tool ist also funktionsbereit.

Marcedit habe ich bei mir gleich in meinem Homeverzeichnis gepackt, weil ich dann weniger „tippen“ muss und die App eh ständig brauche

~/marcedit

Will man jetzt also die Befehlszeile von MarcEdit aufrufen, muss man grundsätzlich nur folgendes eingeben:

mono ~/marcedit/cmarcedit.exe

Bildschirmfoto 2016-03-05 um 10.09.02

Die Befehle von MarcEdit sind auf dieser Seite sehr gut beschrieben. Mit diesem Befehl kann ich also eine einzelne MARCXML Datei in eine USMARC Datei wandeln:

mono ~/marcedit/cmarcedit.exe -s ~/marcedit/a_input/marcxml.xml -d ~/marcedit/a_output/usmarc.mrc -xmlmarc

Wenn alles klappt antwortet MarcEdit dann mit einer Bestätigung:

Beginning Process...
1 records have been processed in 0,471893 seconds.

Super, ein Datensatz klappt also, wie machen wir das mit einem vollständigen Verzeichnis mit 80’000 Datensätzen?

Hier kommt jetzt das Problem – vielleicht geht es nativ in MarcEdit, aber ich hab es nicht rausgefunden. Ich habe also ein kleines Shell-Script geschrieben, was für jede Datei in einem Verzeichnis die Konvertierung durchführt.

#!/bin/bash

FILES=~/Desktop/directory/input/*
OUTPUT=~/Desktop/directory/output/
for f in $FILES
do
  filename=$(basename $f)
  file="${filename%.*}"
  mono ~/marcedit/cmarcedit.exe -s "$f" -d "$OUTPUT$file.mrc" -xmlmarc
done

Das Script ist nicht wirklich gut durchdacht. Im ersten Schritt erstellt es eine Liste aller Dateien im Verzeichnis und im For-Loop wird jetzt jede Datei im Verzeichnis behandelt. Damit wir den Ausgabe-Dateiname flexibel bestimmen können, lass ich mir den Dateinamen ohne Extension extrahieren und füge diesen dann im Ausgabeverzeichnis an und füge die Extension .mrc hinzu.

Bei der Extension gehe ich fest davon aus, dass es keine Dateien gibt, die mehr als eine Extension haben. Der Befehl im Script könnte aus dateiname.tar.gz nicht dateiname extrahieren, sondern würde dateiname.tar ausgeben, was nicht wirklich hilft. Da ich jedoch nur .xml Dateien hatte, ist das ein „non-issue“

Die Konvertierung hat zwar „unendlich“ lange gebraucht 80’000 x 0,4 Sekunden ist halt schon ne Ordentliche Zeitspanne, aber es ist gut gelaufen, auch wenn mein MacBook Pro auf der Arbeit deutlich „zu schnaufen“ begann.

Das Ergebnis?

Aus schön lesbaren XML Dateien wurde, wurde ein ganz schreckliches Format. Ich mag .mrc Dateien gar nicht, denn ohne MarcEdit kann die eh keiner wirklich lesen. Bibliothekssystem finden diese gut ;) Also hier drei Screenshot:

1) Ursprungsformat

Bildschirmfoto 2016-03-05 um 10.37.37

2) Konvertiert

Bildschirmfoto 2016-03-05 um 10.37.41

3) Der Beweis, dass es alles passt (die .mrc Datei wird von MarcEdit in .mrk gewandelt)

Bildschirmfoto 2016-03-05 um 10.37.59

Braucht man das? Offenbar schon…


Claus Wolf

Seit 1994 im Netz unterwegs und seit 2004 eingefleischter Mac-Nutzer.

0 Kommentare

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.