Hilfe, Seriendruck!

Wie immer brennt der Boden. “Das muss jetzt schnell gehen: Bitte bring die Daten aus einer Microsoft Access-Tabelle nach Lotus Notes. Programmier’ halt ‘was …”

Erster Ansatz: Export als csv. Problem: Ich finde kein geeignetes Trennzeichen. Die Daten sind alt und “schmutzig”. Damals hat sich niemand über erlaubte und unerlaubte Zeichen Gedanken gemacht. Sackgasse.

Zweiter Versuch: Lotus Notes importiert etwas, das in der Notes-Sprache “Structured Text” genannt wird. Ein Structured Text enthält Blöcke von Schlüsselwort-Wert-Paaren. Die Struktur eines Blocks ist immer gleich. Sie besteht aus beliebig vielen Schlüsselworten, jedes in einer eigenen Zeile, mit dem zugehörenden Wert dahinter. Die Schlüsselworte wiederholen sich in jedem Block, die Werte können in jedem Block unterschiedlich sein. Die Blöcke sind voneinander durch ein besonderes Zeichen getrennt, meistens benutzt man dazu ASCII dez 12, hex 0c, aka “FormFeed” aka “Seitenumbruch”. Jeder importierte Block wird zu einem Notes-Dokument.

Im folgenden Beispiel kann das Zeichen für “Seitenumbruch” nicht dargestellt werden, deswegen schreibe ich statt dessen “(S)”.

Name: Rilke
Vorname: Rainer Maria
(S)
Name: Uhland
Vorname: Ludwig
(S)
Name: Allesch
Vorname: Elly

Wie komme ich von einer Tabelle mit tausenden Zeilen, die Name und Vorname in jeweils einer Zeile enthält zu einer Darstellung als Structured Text? Die Überschrift legt es nahe: Ich habe Microsoft Word’s Seriendruck-Funktion genutzt. Die kann Access-Datenbanken ansprechen und liefert das gewünschte Ergebnis. Als Vorlage habe ich etwas benutzt, das in Word ungefähr so aussieht:

Name: <<Name>>
Vorname: <<Vorname>>
(S)

In dieser Vorlage erkennt man das wieder, was ich oben “Block” genannt habe. Nach den Schlüsselworten “Name” und “Vorname” folgen Doppelpunkt und Leerzeichen und danach ein Platzhalter für den echten jeweiligen Wert aus der Tabellenzeile. Der Seriendruck kombiniert diese Vorlage mit den Tabellendaten und schreibt seine Ausgabe in eine neue Datei. Und diese neue Datei ist eben genau so, wie Lotus Notes sie für den Import von Structured Text braucht.

Ich will nicht lügen. Die Datei musste angepasst werden, ebenso die notwendige Notes-Maske. Problem ist, dass Notes versucht, schlau zu sein. Wenn es von einem importierten Wert meint, er sei eine Zahl, und ich will nicht, dass dieser Wert als Zahl interpretiert wird, dann muss ich tricksen: Die nicht-Zahl-Werte bekommen ein Dollar-Zeichen vorangestellt. Das veranlasst Notes, den Wert als Zeichenkette zu interpretieren. Aber nun ist der Wert falsch! “$3.2001″ ist ganz anders als “3.2001”. Das Dollar-Zeichen wird durch eine Eingabeumsetzung in der Notes-Maske entfernt. Beim Import muss deshalb die Option “Felder erneut berechnen” aktiviert sein. Details, Details …

Ich bin Programmierer und deswegen immer froh, wenn mein Chef Programmierung verlangt. Aber Denksport und Tüfteln mag ich auch. Wenn ich so einen Eigenlob-stinkt-pfiffigen Weg finde, dann ausnahmsweise ;-) ohne Programmierung. Ausserdem denke ich, dass dies ein allgemeiner Weg ist, um von relationalen Daten zu NoSQL-Daten zu kommen.

Dieser Beitrag wurde unter Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.