TokenFileSplitter
Gruppe |
|
Funktion |
Der Preparser kann eine Eingangsdatei indirekt in mehrere Datenblätter (Records) aufsplitten. |
Konfigurationsdatei |
./conf/samples/sample_splitter.properties |
Beschreibung
Mit dem TokenFileSplitter kann man in CSV- oder Feste-Länge-Eingangsdaten, bei denen jeder Datensatz als eine Zeile enthalten ist, zusätzliche Zeilen einfügen. Ziel ist es, sehr große Dateien in Abschnitte zu unterteilen, damit der Parser mehrere Datenblätter (Records) erzeugen kann. Da aktuell nicht im Mapping bearbeitete Datenblätter automatisch auf die Festplatte ausgelagert werden können, dient dieser Preparser vor allem dazu, einen Speicherüberlauf des Arbeitsspeichers (die gefürchtete OutOfMemoryException) zu vermeiden.
Über verschiedene Parameter kann man entscheiden, an welchen Stellen der Eingangsdaten eine zusätzliche Zeile als "Trennzeile" für die Erzeugung eines neuen Datensatzes eingefügt wird. In der Quell-Struktur des Profils muss als erster Knoten ein zusätzlicher Knoten eingefügt werden, dessen Satzartkennung auf diese Trennzeile reagiert. Dadurch wird beim CSV-Parser automatisch bei jedem Auftreten dieser Trennzeile ein neues Datenblatt erzeugt.
Es ist garantiert, dass immer die Trennzeile als erste Zeile eingefügt wird (auch beim ersten Block). Der Text, der in der Trennzeile steht, kann über den Parameter header vorgegeben werden. Der Parameter rows erwartet einen positiven Ganzzahlwert, der vorschreibt, nach wie vielen Eingangszeilen die Trennzeile eingefügt werden soll. Wird der Wert 0 gesetzt, wird dieser intern durch den Maximalwert 2147483647 ersetzt. Mit einem sehr großen Wert kann man erreichen, dass praktisch nur am Anfang die Trennzeile eingefügt wird, also faktisch als Header der Eingangsdatei.
Wenn formal alle rows Zeilen eine Trennzeile eingefügt wird, kann es geschehen, dass aufeinanderfolgende Zeilen mit gleichen Satzarten auseinander gerissen werden. Um das zu vermeiden, kann man im Parameter expression einen regulären Ausdruck angeben. Erst wenn nach Erreichen der Zeilenzahl eine Zeile diesem Ausdruck entspricht, wird vor dieser Zeile die Trennzeile eingefügt. Danach beginnt der Zeilenzähler wieder mit 1. Wenn der Parameter rows=0 und der Parameter expression definiert ist, wird nicht vor der Zeile, die den regulären Ausdruck trifft, die Trennzeile eingefügt, sondern danach.
Es kann gewünscht sein, dass nicht alle Zeilen beachtet werden, sondern nur bestimmte Zeilen. Mit dem Parameter filter kann ein regulärer Ausdruck definiert werden. Nur wenn dieser Ausdruck zutrifft, erscheint die Zeile im Ergebnis und wird der Zeilenzähler erhöht.
rows |
(Pflichtwert) Anzahl der Zeilen, nach der eine Trennzeile eingefügt wird. |
header |
(Pflichtwert) Trennzeilen-String, der eingefügt werden soll. |
expression |
Regulärer Ausdruck, der das Einfügen einer Trennzeile nach erreichter Zeilenzahl verzögert, bis er auf die momentan gelesene Zeile passt. |
eol |
Das Zeilenende-Zeichen (end of line). 0 wird als \n, 1 als \r und alle anderen Werte werden als \r\n interpretiert. |
filter |
Regulärer Ausdruck, filtert die Quellzeilen. Inputzeilen, die den Ausdruck nicht treffen, werden ignoriert (nicht ausgegeben und nicht gezählt). |
Beispiel-Datei
#
# sample file for TokenFileSplitter
#
# Supported keys are: rows, header, expression, eol
#
# rows = amount of rows that are combined for one record
# header = line that will be pasted into to indicate a new record
# expression = empty or a reg. expression that must match on current read line to create a new record (beside rows)
# eol=end of line (0=\n, 1 = \r, all other settings will be used for \r\n)
#
rows=10
header=new!