Importmodul IV: Importprofil

Einfache Deklarationen und Bedingungen

Wie bereits in den bisherigen Beispielen angedeutet, dienen die Spalten der Quelldateien als Bausteine für die Datengrundlage der Zieltabellen. Eine Quellspalte ist funktional nur eine Liste von Zeichenketten. Eine einzelne Zeichenkette, zusammen mit der Angabe einer Anzahl, kann deshalb als Ersatz für eine "echte" Quellspalte dienen. Daher ist es möglich, einer Zielspalte eine einzelne Zeichenkette (frei definiert oder einer der Spezialwerte) als Datenquelle zuzuordnen, wenn es für den entsprechenden Datentyp mindestens eine Zielspalte gibt, der eine echte Quellspalte zugeordnet ist, so dass die Anzahl der Datensätze feststeht.

Dieser Ansatz lässt sich verallgemeinern. Im Prinzip ist jede Art, auf der Grundlage der vorhandenen Quellspalten, eine eindeutig definierte Liste von Zeichenketten zu konstruieren, ein adäquater Ersatz für eine echte Quellspalte. Es gibt im recotech Importmodul mehrere verschiedene Arten von Quellspalten, die teilweise durch logische Bedingungen qualifiziert werden.

Definition und Konstruktion dieser Datenspalten und der sie konstituierenden logischen Funktionen erfordern teilweise eine gewisse Vertrautheit mit Programmierung, Datenstrukturen und formaler Logik. Deshalb ist ihre Beschreibung auf zwei Kapitel verteilt. In diesem werden die Definitionen vorgestellt, die intuitiv leicht verständlich sind. Das folgende Kapitel enthält die komplizierteren. Beide Kapitel sind eher informell. Im Anhang finden sich die formalen Definitionen.

Quellspalten verbinden

Aus mehreren Quellspalten lässt sich eine neue konstruieren, indem die Zeichenketten aneinander gehängt werden. Die entsprechende Deklaration in der Profildatei ist wie folgt:

$TargetColumn Comment

Personen.Nachname + ", " + Personen.Vorname

In die Kommentar-Zielspalte einer Importtabelle würden dann Einträge wie 'Müller, Peter' stehen. Diese Art der Quellspaltenkonstruktion kann nur dann funktionieren, wenn alle beteiligten Quellspalten die gleiche Zeilenanzahl haben. Streng genommen: die gleiche oder keine definierte. Im obigen Beispiel sind nämlich nicht zwei, sondern tatsächlich drei Quellspalten verknüpft. Die Zeichenkette '", "' definiert ebenfalls eine Quellspalte: Eine Liste von Zeichenketten, die alle nur aus einem Komma gefolgt von einem Leerzeichen bestehen. Und zwar so viele, wie aus dem Kontext heraus benötigt werden.
Die Zitatzeichen deuten dem Importmodul an, dass hier eine buchstabengetreue Zeichenkette steht, die nicht interpretiert werden soll. Die Anführungsstriche werden nicht als Teil dieser Zeichenkette gelesen.

Ersetzungen in Quellspalten

Ersetzungen von Werten

Auf der Grundlage einer Quellspalte lässt sich eine neue konstruieren, indem sie kopiert und manche Werte durch andere Werte ersetzt werden. Die Deklaration

$TargetColumn Comment

FullReplace(Personen.Kommentar, "bitte nachtragen", Personen.Kommentar = "")

definiert eine neue Quellspalte, die der Spalte Personen.Kommentar entspricht, in der aber in allen dort leeren Feldern 'bitte nachtragen' steht. Diese Quellspalte wird der Kommentarspalte einer Importtabelle zugeordnet.

Die Deklaration einer solchen durch bedingte Ersetzung zu konstruierenden Quellspalte wird mit dem Schlüsselwort 'FullReplace' eingeleitet. In Klammern dahinter und durch Kommata getrennt, müssen drei weitere Angaben stehen: die als Grundlage dienende Quellspalte, die neuen Werte und eine Bedingung.

Als neuer Wert kann, wie im obigen Beispiel, eine feste Zeichenfolge dienen. Es kann an dieser Stelle aber auch jede andere Quellspalte verwendet werden. Zum Beispiel die vorher definierte kommagetrennte Verkettung von Nach- und Vorname:

20

$TargetColumn Comment

21

FullReplace(Personen.Kommentar, Personen.Nachname + ", " +                      


                             Personen.Vorname, Personen.Kommentar = "")

22



Wenn die Seitenbreite dieses Dokuments einen Zeilenumbruch erzwingt, werden in den Beispielen graue Zeilennummern vorangestellt. Diese sind nicht Teil der Profildatei und die genauen Zahlen sind irrelevant. Sie sollen nur andeuten, dass die hier umgebrochen dargestellte Zeile in der Profildatei in einer Zeile stehen muss.

Ersetzungen in Werten

Die oben vorgestellte Ersetzung kopiert die Quellspalte und tauscht einige Werte durch andere aus. Eine andere Möglichkeit der Ersetzung besteht darin, nur Teile eines Wertes zu ersetzen. Die entsprechende Definition lautet:

$TargetColumn Comment

 PartialReplace(Punkte.Nr, "P", "")  


Auf AutoCAD basierende Schnittstellen, wie zum Beispiel auch das von recotech eingesetzte und empfohlene hylasFM, exportieren die Reihenfolge der Punkte eines Polygons oft mit Angaben im Format P1, P2, ….

Diese Zeichenketten lassen sich zwar als Zeichenketten sortieren, aber ohne weitere Interpretation mit dem Ergebnis P1, P10, P11, P2, P3, …

Deshalb fordert die Importschnittstelle, dass die Daten in der Spalte Nummer der Punkttabelle als Zahl interpretiert werden können. Die obige Ersetzung ermöglicht genau das.

Die Deklaration einer solchen Quellspalte wird mit dem Schlüsselwort 'PartialReplace' eingeleitet. In Klammern dahinter und durch Kommata getrennt müssen drei weitere Angaben stehen: die als Grundlage dienende Quellspalte, die zu ersetzenden Teile und die Ersetzungen. Eine zusätzliche Bedingung ist hier nicht notwendig. Die Ersetzung findet nur statt, wenn die zu ersetzende Zeichenkette gefunden wird.

Diese beiden Ersetzungen ändern nicht die als Grundlage dienenden Quellspalten, sondern erzeugen neue. Dies gilt generell für alle Deklarationen von eigens definierten Quellspalten.

Neue Quellspalten benennen

Wie bereits angedeutet, können Quellspalten beliebig verschachtelt werden: Die aus der Verkettung der Namen entstandene Quellspalte diente als Lieferant der neuen Werte in einer durch FullReplace definierten Quellspalte. Diese könnte selbst wiederum als Bestandteil weiterer Quellspalten-Definitionen dienen.

Weil solche längeren Konstruktionen schnell unübersichtlich werden, können eigens definierte Quellspalten auch mit einem Alias versehen werden. Wie auch bei den Aliasen der Dateien und Spalten sind nur alphanumerische Zeichen sowie der Unterstrich erlaubt. Eine solche Definition wird mit dem Schlüssel 'SourceColumn' eingeleitet:

30

$SourceColumn NamensKombo Personen.Nachname + ", " + Personen.Vorname

31

$SourceColumn NameOderKommentar FullReplace(Personen.Kommentar,

                                    NamensKombo, Personen.Kommentar = "")

32


33

$TargetColumn Comment

34

NameOderKommentar


Bei der Deklaration der eigens definierten Quellspalten sind deren Aliase frei wählbar, deswegen sind sie in den Beispielen in schwarzer Schrift dargestellt. Bei ihrer Verwendung sind sie, genau wie der Datei-Alias 'Personen', ein vordefiniertes Wort, das interpretiert wird und deshalb dort in grüner Schrift gehalten.

Quellspaltenvergleiche

In den bisherigen Beispielen war die einzige Bedingung die Gleichheit mit der leeren Zeichenkette. Umgekehrt kann man auch die Ungleichheit testen. Dazu wird statt '=' '!= ' verwendet.

An Stelle der leeren Zeichenkette kann eine Bedingung auch mit jeder beliebigen Zeichenkette formuliert werden:

31

$SourceColumn K1 FullReplace (Personen.Kommentar, "keine Angabe",

                                               Personen.Kommentar = "nn")

32

$SourceColumn K2 FullReplace (K1, "keine Angabe", K1 = "NN")

33

$SourceColumn K3 FullReplace (K2, "keine Angabe", K2 = "na")

34

$SourceColumn K4 FullReplace (K3, "keine Angabe", K3 = "NA")

35

$SourceColumn K5 FullReplace (K4, "keine Angabe", K4 = "ka")

36

$SourceColumn K6 FullReplace (K5, "keine Angabe", K5 = "KA")

37


38

$TargetColumn Comment

39

K6

Hier werden eine Reihe von Quellspalten definiert, die letztlich auf der Spalte Personen.Kommentar beruhen, in denen aber schrittweise die Werte 'nn', 'NN', 'na', 'NA', 'ka' und 'KA' durch 'keine Angabe' ersetzt werden.

Der Vergleich mit einer explizit gegebenen Zeichenkette ist wieder nur ein Spezialfall. Je zwei gültige Deklarationen einer Quellspalte können mit '=' oder '!=' auf Gleichheit bzw. Ungleichheit getestet werden:

31

$SourceColumn KommentarMitAnmerkung Replace(Personen.Kommentar,

                             Personen.Kommentar + " (Namen überprüfen)",

                             Personen.Vorname = Personen.Nachname)    

32


33

$TargetColumn Comment

34

KommentarMitAnmerkung

Mit diesen Deklarationen  wird an die Kommentare der Zusatz '(Namen überprüfen)' angehängt, wenn Vor- und Nachname gleich sind.

Bedingungen spielen bei der Definition von Quellspalten eine große Rolle. Wie auch bei den Quellspalten selbst gibt es verschiedene Möglichkeiten sie zu definieren und ineinander zu schachteln. Das nächste Kapitel geht näher auf die Bedingungen ein. Die vollständige formale Definition aller Bedingungen befindet sich im Anhang.

Auslassungsklauseln

Neben der Verwendung in der Deklaration von Quellspalten mittels FullReplace können mit Bedingungen Auslassungsklauseln definiert werden. Es gibt zwei Stellen der Datenextraktion, an denen es sinnvoll und möglich ist, bestimmte Zeilen bzw. Datensätze zu ignorieren: Beim Einlesen der Dateien und beim Erzeugen der Importobjekte. Beide Fälle seien am Beispiel der folgenden Excel Datei erläutert:

1

Platzanspruch

Typ

Abteilung

Vorname

Nachname

Kommentar

2

Controlling

 

 

 

 

 

3

SA1_Con

Sachbearbeiter

Controlling

Peter

Müller


4

SA2_Con

Sachbearbeiter

Controlling

Maria

Meier


5

SA3_Con

Sachbearbeiter

Controlling

Klaus

Schneider


6

SA4_Con

Sachbearbeiter

Controlling

Ingo

Schmidt


7

AL_Con

Abteilungsleiter

Controlling

Ines

Schulz


8

Conf_Con

Besprechung

Controlling




9







10

CAD

 

 

 

 

 

11

SA1_CAD

Sachbearbeiter

CAD

Axel

Bauer


12

SA2_CAD

Sachbearbeiter

CAD

Maria

Meier


13

AL_CAD

Abteilungsleiter

CAD

Helge

Schulze


14

Plotter_CAD

Technik

CAD




Aus dieser Tabelle sollen die Platzansprüche und die Personen ausgelesen werden. Die entsprechende Dateideklaration sieht wie folgt aus:

$File

Personal.csv

$Alias

Personal

$Headline

True

$ColumnNumber

6

$ColumnSeperator

;

$QuoteChar

"

$Encoding


$Columns


 Platzanspruch

0

 Typ

1

 Abteilung

2

 Vorname

3

 Nachname

4

 Kommentar

5 EmptyString



$SourceIgnore

Personal.Typ = ""

Die erste Zeile der aus der Tabelle generierten CSV-Datei wird durch die Angabe, dass sie eine Kopfzeile enthält, ignoriert. Die beiden gelben Zeilen und die Leerzeile zwischen den beiden Blöcken enthalten keine Daten. Um sie schon beim Einlesen der Datei zu ignorieren, wird vor der nächsten Dateideklaration die Zeile mit dem Schlüssel SourceIgnore eingefügt.

Damit wird das Importmodul angewiesen, in der Datei alle Zeilen zu ignorieren, in denen in der Spalte Typ nichts steht. Die sechs deklarierten Quellspalten haben damit nur zehn Zeilen. Die drei personenrelevanten Quellspalten haben allerdings immer noch zwei Zeilen ohne Information (Zeile 8 und 14). Diese sollen nur bei der Verwendung in der Personen-Importtabelle ignoriert werden.

Die entsprechenden Deklarationen der Zielspalten für die Personen-Importtabelle lauten wie folgt:

$Type XPerson


$TargetIgnore LastName = ""


$TargetColumn XId

AutoString


$TargetColumn FirstName (Identifying)

Personal.Vorname


$TargetColumn LastName (Identifying)

Personal.Nachname


$TargetColumn Comment

Personal.Kommentar


$TargetColumn Command

InsertString

Die zusätzliche Anweisung mit dem Schlüssel TargetIgnore weist das Importmodul an, bei der Erstellung der Personen-Importobjekte alle auszulassen, die in der Eigenschaft LastName eine leere Zeichenfolge hätten.

Der Unterschied zwischen den beiden Auslassungsklauseln SourceIgnore und TargetIgnore ist nicht nur der Zeitpunkt, zu dem sie ausgewertet werden, sondern vor allem folgender: Die Bedingungen in den ersten Klauseln werden mit Quellspalten definiert; die Bedingungen in den letzteren mit Zielspalten.

Nach dem Schlüsselwort SourceIgnore erwartet das Importmodul die Deklaration einer Quellbedingung, die für die Datei definiert ist, in deren Deklarationsblock die Auslassungsklausel steht.

Nach dem Schlüsselwort TargetIgnore erwartet das Importmodul die Deklaration einer Zielbedingung, die für den Datentyp definiert ist, in dessen Deklarationsblock die Auslassungsklausel steht.

Die vollständigen Listen der Quell- und Zielbedingungen und ihre genaue Syntax finden sich im Anhang.