CSV (Dokumentenart)

Einstellungen


(1) Eingangsformat prüfen: Wenn diese Checkbox gesetzt wird, dann werden die Quellstrukturfelder beim Parsen auf die dort hinterlegten Format-Vorlagen geprüft. Wenn ein Wert die Format-Vorlage des Feldes verletzt oder die Feldlänge überschreitet, wird ein Fehler erzeugt. Im Fehlerfall wird nicht sofort in Phase 2 abgebrochen, sondern erst am Ende von Phase 2 oder bei 50 Fehlern. Achtung: Die Verwendung der Formatprüfung belastet die Performance und sollte nur wenn unbedingt nötig verwendet werden.

(2) Min/Max Eingangs-Angaben prüfen: Gibt an, ob die Anzahl von Wiederholungen (von Feldern und Knoten) in der Quellstruktur überprüft werden soll.

(3) Leerzeichen entfernen (Normalisierung bei XML): Whitespaces am Anfang und Ende von quotierten Feldwerten werden entfernt. Beispiel: "33 ";" 44";" 55 ";"66 77 " wird zu "33";"44";"55";"66 77".

(4) Erzwinge ein einzelnes Datenblatt: Gibt an, ob die Daten in einem einzigen Datenblatt zusammengefasst werden sollen. Ist diese Checkbox gesetzt, dann wird unterbunden, dass der Parser mehrere Datenblätter erstellt.

(5) Lesemodus: Zeilenweise oder spaltenweise Anordnung der Daten in der Datei.

(6) Trennzeichen für Datensätze: Das Feld gibt das Trennzeichen zwischen den Zeilen bzw. Spalten (siehe Punkt 5) an. Um die Werte der einzelnen Spalten auseinander zu halten, müssen diese mit einem Trennzeichen getrennt werden. Bei zeilenweiser Anordnung wird üblicherweise der Zeilenumbruch (Neue Zeile) benutzt. Bei spaltenweiser Anordnung, muss hier das Trennzeichen zwischen den Spalten eingetragen werden. Das Trennzeichen darf im Text vorkommen, dann muss der betroffene Text aber von CSV-Quoting-Zeichen (7) umgeben sein.

(7) CSV-Quoting: Siehe (6).

(8) Beginne bei Zeile: Gibt an, ab welcher Zeile die Nutzdaten beginnen. Diese Einstellung dient dazu, eine bestimmte Anzahl an Zeilen zu überlesen. Der Wert wird nur berücksichtigt, wenn bei (5) jede Zeile als Datensatz interpretiert wird. Leere Zeilen werden nicht mitgerechnet. Hinweis: Siehe auch System-Variable VAR_SYS_LINES.

(9) Und bei Spalte: Gibt an, ab welcher Spalte die Nutzdaten beginnen. Diese Einstellung dient dazu, eine bestimmte Anzahl an Spalten zu überlesen. Der Wert wird nur berücksichtigt, wenn bei (5) jede Zeile als Spalte interpretiert wird. Leere Spalten werden nicht mitgerechnet.

(10) Lese bis Zeile: Gibt an, bis zu welcher Zeile die Daten gelesen werden sollen. Die nachfolgenden Zeilen in der Datei werden dann ignoriert.

(11) Überspringe Zeilen nach Satz: Gibt an, wie viele Zeilen nach einem Datensatz übersprungen werden sollen.

(12) CSV ist Excel konform (CSV Export aus Excel): Wenn diese Option gesetzt ist, wird das CSV-Eingangsdokument in der Form erwartet, wie es durch den Microsoft-Excel-CSV-Export erzeugt wird.

(13) Weiterlesen bei Zeilenumbruch in Spalte: Wenn diese Option gesetzt ist, werden Zeilenumbrüche in Spalten entfernt.

Vorher

Hallo, Du

da.

Nachher

Hallo, Du da.

(14) Gleiche Satzarterkennungen kommen vor: Gibt an, ob gleiche Satzarten zwar mehrfach (verschachtelt) vorkommen, jedoch nicht zum selben Knoten gehören. Beispiel:

SatzA
SatzB
...
SatzC
...
SatzD
SatzC
SatzD
SatzC
...

Der erste C-Satz soll in einen eigenen Knoten eingelesen werden, die folgenden C-Sätze jeweils in einen D-/C-Knoten (der davor liegende C-Knoten soll nicht mehr berücksichtigt werden). Der CSV-Parser soll hier also so ähnlich wie der EDIFACT-Parser arbeiten, d. h. er geht die Struktur von oben nach unten durch und merkt sich, wo er ist. Wurde einmal der untere D/C-Knoten betreten, wird nichts mehr in den oberen C-Knoten eingefügt. Hinweis: Die gesetzte Checkbox ändert auch das Verhalten, wann ein neues Datenblatt erzeugt wird.

(15) Semantische Prüfung ausführen: Eingehende Dateien können mit semantischen Regeln überprüft werden. Siehe Abschnitt Semantische Prüfung.

Struktur-Vorlagen


Siehe Abschnitt Vorlagen für Quell- und Zielstrukturen.

Zeilen ohne Abhängigkeiten


Eine CSV-Datei ist eine Text-Datei, die tabellarisch strukturierte Daten enthält und vorrangig zum Datenaustausch verwendet wird. Bei CSV-Dateien wird zwischen zeilenweiser oder spaltenweiser Anordnung unterschieden.

Die erste Tabelle zeigt ein Beispiel für zeilenweise Anordnung. Jede Zeile ist ein Datensatz, je mehr Datensätze, desto mehr Zeilen. Die Anzahl von Spalten in der Datei bleibt gleich.



Feld1

Feld2

Feld3

Feld4

Datensatz1

D1F1

D1F2

D1F3

D1F4

Datensatz2

D2F1

D2F2

D2F3

D2F4

Datensatz3

D3F1

D3F2

D3F3

D3F4

Datensatz4

D4F1

D4F2

D4F3

D4F4


Die zweite Tabelle zeigt ein Beispiel für spaltenweise Anordnung. Jede Spalte ist ein Datensatz, je mehr Datensätze, desto länger die Zeilen. Die Anzahl von Zeilen in der Datei bleibt gleich.



Datensatz1

Datensatz2

Datensatz3

Datensatz4

...

Feld1

D1F1

D2F1

D3F1

D4F1

...

Feld2

D1F2

D2F2

D3F2

D4F2

...

Feld3

D1F3

D2F3

D3F3

D4F3

...

Feld4

D1F4

D2F4

D3F4

D4F4

...


Das erste Listing zeigt den einfachsten Fall einer CSV-Datei in zeilenweiser Anordnung. Die Datei hat nur einen Datensatztyp, die Felder sind durch Semikolon (;) voneinander getrennt.


#OrderHeader=OH
OH;Order1
OH;Order2
OH;Order3


Das zweite Listing zeigt die gleiche CSV-Datei in spaltenweiser Anordnung.


OH;OH;OH
Order1;Order2;Order3


Beim Mapping wird der Quellbaum auf den Zielbaum abgebildet. Die Erstellung des Quellbaumes wird durch den Parser erledigt. In der Quellstruktur kann der Benutzer eigene Knoten und Felder erstellen, um die Struktur der Quelldaten abzubilden.

Die Abbildung unten zeigt die Arbeitsweise des Parsers. Aus den drei Zeilen werden drei Datensätze mit je 2 Feldern. Der Parser zerlegt die Eingangsdatei ab der zweiten Zeile in einzelne Datensätze. Danach müssen die Zeilen noch in Werte zerlegt werden. Um dieses Ziel zu erreichen, muss dem Parser zunächst mitgeteilt werden, eine ganze Zeile als Spalte zu interpretieren. Dies wird erreicht, indem als Trennzeichen in Feld (6) der Wert Neue Zeile eingetragen wird. Anschließend müssen die Zeilen noch auseinandergenommen werden. Dazu muss eingestellt werden, wie die Werte in einer Zeile getrennt sind. Diese Einstellung wird in den Eigenschaften eines Knotens vorgenommen.


images/download/attachments/135169041/CSV_1-version-1-modificationdate-1680582296290-api-v2.png


Die folgende Abbildung zeigt die Quellstruktur für die Beispieldatei unabhängig von der Anordnung der Daten in der Datei.


images/download/attachments/135169041/401-version-1-modificationdate-1734664708779-api-v2.png


Die Eigenschaft "Trennzeichen Spalte/Datensatz" für den Knoten "OrderHeader" der Quellstruktur aus der vorherigen Abbildung gibt an, welches Zeichen die Werte in einer Zeile trennt. Da der Wert im Knoten eingetragen wird, sind unterschiedliche Trenner für unterschiedliche Datensatz-Typen möglich.

Ein Knoten auf der Eingangsseite wird nur betreten, wenn die eingestellten Bedingungen erfüllt sind. Diese Einstellungen, die sogenannten Satzarterkennungen, können im Kontextmenü der Quellstruktur-Knoten definiert werden.

Für einen Knoten können beliebig viele Bedingungen eingetragen werden. Die Bedingungen werden ODER-verknüpft. Im Beispiel ist die Satzarterkennung der Wert des ersten Feldes in jeder Zeile. Mit dem Mechanismus der Satzarterkennung können unterschiedliche Datensatztypen in einer Eingangsdatei gemischt werden. Wird die Checkbox (14) auf Seite CSV (Dokumentenart) gesetzt, kann die gleiche Satzarterkennung auch innerhalb eines Unterknotens verwendet werden.

Beim CSV-Parser müssen in den Oberknoten ebenfalls die Zeichenfolgen definiert sein, die erlauben, dass die Unterknoten betreten werden. Beim Feste-Länge-Parser werden die Unterknoten dagegen allein durch die Zeichenfolgen in den Unterknoten gefunden.

Bei einer Hierarchie von Knoten muss als Spaltentrenner im Vaterknoten das Leerzeichen (" ") oder nichts ("") eingetragen werden.

Die Abbildung unten zeigt die Arbeitsweise des Parsers bei der Zerlegung einer Datei in Datenblätter bei der Verwendung unterschiedlicher Satzarten.


images/download/attachments/135169041/CSV_2-version-1-modificationdate-1680582296286-api-v2.png

Zeilen mit Abhängigkeiten


Im vorherigen Beispiel gab es keinerlei Abhängigkeiten zwischen den Zeilen in der Eingangsdatei, meistens gibt es die aber.

Das folgende Listing zeigt das Beispiel einer Datei mit Auftragsköpfen und zugeordneten Auftragspositionen. Ein Auftragskopf steht in einer eigenen Zeile und danach folgen die zugehörigen Auftragspositionen. Die Datei enthält drei Aufträge mit jeweils einer, zwei und drei Positionen. Die Positionen gehören jeweils zum vorhergehenden Auftragskopf.


#OrderHeader=OH
#OrderPosition=OP
OH;Order1
OP;Pos1 O1
OH;Order2
OP;Pos1 O2
OP;Pos2 O2
OH;Order3
OP;Pos1 O3
OP;Pos2 O3
OP;Pos3 O3


Eine solche hierarchische Abhängigkeit kann auf zwei Arten abgebildet werden.

Der erste Screenshot zeigt die Quellstruktur für die Beispieldatei. Dabei wurden der Auftragskopf und die Position auf oberster Ebene eingefügt.


images/download/attachments/135169041/404-version-1-modificationdate-1734664753315-api-v2.png


Der zweite Screenshot zeigt eine alternative Quellstruktur für die Beispieldatei. Dabei wurden der Auftragskopf und die Position in einen Oberknoten Order verschoben.


images/download/attachments/135169041/405-version-1-modificationdate-1734664753328-api-v2.png


Der Unterschied der beiden Lösungen liegt darin, dass für die Quellstruktur in der ersten Abbildung mit jedem Auftragskopf ein neues Datenblatt angelegt wird, während für die Quellstruktur in der zweiten Abbildung nur ein Datenblatt angelegt wird, das alle drei Aufträge enthält.

Falls keine Abhängigkeiten beim Ausgang zwischen den Aufträgen hergestellt werden müssen, ist die erste Lösung zu bevorzugen. Der Grund dafür ist, dass der Parser innerhalb eines Datenblatts arbeitet. Je kleiner die Datenmenge in einem Datenblatt, desto schneller arbeitet der Parser.

Sollen im Ausgang Abhängigkeiten zwischen den Aufträgen hergestellt werden (z. B. die Aufträge in einer Sendung zusammenzufassen), muss die Lösung in der zweiten Abbildung gewählt werden. Bei dieser Lösung entstehen die drei Aufträge in einem Datenblatt, hier können Abhängigkeiten erstellt werden (mehr dazu im Abschnitt Phase 3).

Immer wenn der erste Knoten der obersten Ebene in der Quellstruktur (bei einem CSV-Parser) betreten wird und mehrere Knoten auf oberster Ebene vorhanden sind, beginnt der Parser ein neues Datenblatt. Im Beispiel in der ersten Abbildung wird demzufolge ein neues Datenblatt angefangen, wenn ein Auftragskopf eingelesen wird. Dadurch entsteht pro Auftrag ein Datenblatt, in dem Auftragskopf und zugehörige Positionen enthalten sind.

Die Reihenfolge der Felder in den Knoten bestimmt, welche Werte innerhalb der Zeilen den Feldern im Quellbaum zugewiesen werden.