Sie sind hier

Adressdateien in scrlttr2-Format umwandeln.

Dieser Post ist keine Frage, sondern zeigt eine Lösung.
Möglicherweise müsste er innerhalb von komascript.de woanders stehen. Möge das bitte der Webmaster veranlassen.

Ich hatte das Vergnügen, einen Serienbrief mit 170 Adressaten zu verfassen.
Die scrlttr2-Klasse bietet ja hervorragende Unterstützung. Lästig ist lediglich die Adressdatei, die ein bestimmtes Format haben muß.

Hier ein kleines Perl-Script, das die Arbeit erledigt.


*********************cut here*********************
#!/usr/bin/perl -w
#

# Adressdatei von der Kommandazeile uebergeben.
# Oeffnen des Datei-handle
open (EIN, "$ARGV[0]");

# Angenommenes Format der Datei:
# Zeilenweise; die Felder sind mit ; getrennt.
# z.b. exportiert aus MS-Exl oder OO-Calc.
# titel;vorname;nachname;straße hausnr;PLZ;Ort;Land;telefon
#
# Solange zeilenweise lesen bis zum Ende der Datei
while (<EIN>) {
# Entfernung von \n oder \r\t am Ende der Zeile:
  chomp;
# einlesen einer Zeile und Uebergabe der Felder in ein Array.
# Feldtrenner ist ";"
  @z = split(/;/);
# Drucken der Felder
  print "\\adrentry{$z[2]}\n";
  print "         {$z[1]}\n";
  print "         {$z[3]\\\\$z[4] $z[5]\\\\$[6]}\n";
  print "         {$z[7]}\n";
  print "         {}\n";
  print "         {$z[0]}\n";
  print "         {}\n";
  print "         {$z[2]}\n";
  print "\n"
}

# Schliessen des Dateihandles
close (EIN);

****************cut here******************

Programm ausfuehrbar machen
$> chmod u+x programm.pl

Starten des Programms auf der Kommande-Zeile:
$> ./programm.pl eingabedatei > ausgabedatei.adr

Die Ausgabe sieht so aus:


\adrentry{Laus}
         {Nico}
         {Weißer Weg 1\\12345 Winterhausen\\Nordpol}
         {0162/3232325}
         {}
         {Prof. Dr.}
         {}
         {Laus}

Vielleicht hilfts ja einem.

Gruß
Peter

Das oben genannte (von mir leicht angepasste) Skript führt bei mir zu einer Menge von Fehlern dieser Art:

Use of uninitialized value $z[5] in concatenation (.) or string at /home/chris/bin/csv-to-adr.pl line 28, <EIN> line 4.

Zeile 28 in csv-to-adr.pl lautet:

 print " {$z[5] $z[6]\\\\$z[7] $z[8]}\n"; # #3 Adresse (Straße ([5]) Hausnr. ([6]), PLZ ([7]) Stadt ([8]))

$z[5] in der Eingabedatei lautet: Berliner Straße. Die CSV-Datei ist in UTF-8 aus OOo 3.0 gespeichert.

Zwar reichen meine Perl-Kenntnisse, um das Skript geringfügig an das Format der Tabellen-Datei anpassen zu können. Aber sie reichen nicht, um den Fehler zu verstehen beziehungsweise zu beheben. Vielleicht wäre meine Frage in einer Perl-Gruppe auch besser aufgehoben. Da ich allerdings nichts Grundsätzliches an dem Skript geändert habe, könnte ich mir vorstellen, dass auch andere KOMA-Script-Nutzer dieses Problem haben. Vielleicht hat sich bei neueren Perl-Versionen etwas geändert (das Skript ist ja schon ein paar Jahre alt)? Hier kommt unter Ubuntu 9.04 Perl v5.10.0 zum Einsatz.

Schöne Grüße
Christoph

Bild von Markus Kohm

Dass $z[5] nicht initialisiert ist, liegt daran, dass bei der split-Anweisung nicht genügend Felder gefunden wurden und deshalb $z[5] nicht belegt wurde. Füge einfach einmal einen Schleifenzähler in das Script ein und lass Dir den vor der Verarbeitung der Zeilen ausgeben. Dann siehst Du in welcher Zeile Deines Datensatzes das Problem gemeldet wird.

Oder Du grenzt den Datensatz so weit ein, bis Du den Fehler findest.

Ein anderes Problem könnte die UTF8-Kodierung der Eingangsdaten sein. AFAIK müsste in diesem Fall ein »binmode (EIN, ':utf8');« nach dem Öffnen der Datei eingefügt werden oder die open-Anweisung ist ensprechend zu ändern, nämlich zu »open (EIN,"<:utf8", "$ARGV[0]");«. Allerdings dachte ich bisher, dass dies nur notwendig wäre, wenn das locale nicht zur tatsächlichen Codierung passt.

Hallo Markus,

danke für Deine Antwort! Nach einigem Weiterprobieren und Eingrenzen ist jetzt alles in Ordnung. Eine Kollegin hat heute Morgen den Datensatz inhaltlich erweitert und korrigiert, mir eben geschickt und jetzt funktioniert es. Ich kann wirklich nicht sagen, woran es liegt. Außer dass bestimmte Felder noch mit Werten gefüllt wurden, hat sich nichts an der Datei geändert. Mit der alten Datei bestehen die Probleme immer noch ...

Schöne Grüße
Christoph

Comments for "Adressdateien in scrlttr2-Format umwandeln." abonnieren