value-splitter( cmd a, [mode/delim b], [value c] )


Diese Funktion ist veraltet (deprecated).

Die Funktion kann sequentiell die einzelnen Komponentenwerte eines Struktur-Datentyps liefern. Zusätzlich können allgemeine Mengen-Operationen für Werte-Mengen ausgeführt werden.

Dieser Funktion liegt eine spezielle Objekt-Art, ähnlich Listen oder Maps, zugrunde, das Splitter-Objekt. Generell werden für ein Splitter-Objekt nacheinander verschiedene Methoden an verschiedenen Stellen des Zielbaumes aufgerufen. Für den Zugriff auf ein Splitter-Objekt existiert keine andere Funktion als der hier beschriebene. Er kapselt alle Operationen für Splitter-Objekte.

Methoden


Die Funktion kennt verschiedene Methoden, die durch einen Methoden-Name in Parameter a adressiert werden. Jede Methode wird durch ein Schlüsselwort in Parameter a festgelegt, das erste Zeichen ist ausreichend, Groß- und Kleinbuchstaben werden nicht unterschieden.

Zum besseren Verständnis trennen wir die Methoden in Basis-Methoden und erweiterte Methoden.

Modus fix oder csv


In der Betriebsart (Modus) fix wird eine FixRecord-Struktur abgebildet, in der Betriebsart csv wird eine CSV-Struktur abgebildet. Die Betriebsart wird bei Initialisierung des Splitter-Objektes festgelegt und bleibt während der gesamten Lebensdauer des Objektes gleich. Während der Lebensdauer ändert sich der Status des Objektes durch die Anwendung von Methoden. Das Ergebnis eines Funktionsaufrufs hängt von folgenden Faktoren ab.


  • Modus, in dem das Objekt erzeugt wurde.

  • Methode a und optionale Parameter b und c.

  • Aktueller Werteinhalt und Status.

  • Kontext, auf den sich der Aufruf bezieht.

Kontext


Ein Value-Splitter-Objekt ist einem bestimmten Knoten der Zielstruktur zugeordnet. Die Zuordnung erfolgt implizit über den Namen des Knotens. Der Knoten und seine unmittelbaren Kind-Felder, aber nicht die Unter-Knoten, bilden einen gemeinsamen Kontext. Die Funktion kann sowohl einem Knoten oder einem Feld zugeordnet werden und er bezieht sich auf den Kontext des Knotens. Diesem Kontext kann durch Initialisierung ein Value-Splitter-Objekt zugeordnet sein, oder auch nicht.

In jedem Kontext kann maximal ein Value-Splitter-Objekt existieren. Alle Methoden, die sich auf einen konkreten Kontext beziehen, beziehen sich damit auf das selbe Value-Splitter-Objekt. Falls in diesem Kontext kein Splitter existiert, beziehen sich alle Methoden auf kein Splitter-Objekt.

Methoden ohne explizite Angabe eines Kontext in b beziehen sich auf den aktuellen Kontext, in dem sie ausgeführt werden.

Als Kontext b kann optional der eindeutige Name eines anderen Ziel-Knotens (einschließlich #xy) verwendet werden. Dann bezieht sich die Methode auf das Value-Splitter-Objekt, das diesem anderen Zielknoten zugeordnet ist, bzw. auf kein Value-Splitter-Objekt, falls in dem angegebenen Kontext kein Splitter existiert.

Basis-Methoden


Methode a (erster Buchstabe genügt)

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

init

fix

Struktur im FixRecord-Format.

Anzahl der Zeichen im Splitter.

Erzeugt und initialisiert den Splitter im Modus fix.

init

csvdelimiter

Struktur im CSV-Format.

Anzahl der Werte im Splitter.

Erzeugt und initialisiert den Splitter im Modus csv.

exist

Optional: Der Kontext.


Boolean: true/false

Existiert ein Splitter im Kontext?

hasNext

Optional: Der Kontext.


Boolean: true/false

Ist noch ein Wert im Splitter vorhanden?

key

Optional: Der Kontext.


Kontext-Name.

Liefert den adressierten Kontext, Platzhalter in b werden aufgelöst.

destroy

Optional: Der Kontext.

Optionales Flag: first

Integer: 0

Zerstört den Splitter im Kontext.

bomb


Optionales Flag: first

no value

Zerstört alle Splitter dieses Jobs.

Mit der Initialisierung beginnt die Existenz des Splitter-Objektes im Kontext des Knotens. Der Modus wird festgelegt und ändert sich bis zum Ende der Lebensdauer des Splitters nicht. Falls in diesem Kontext bereits ein Splitter existierte, wird er zerstört. Wenn der Strukturwert in Parameter c ein leerer Wert war (siehe Hinweise zum Empty Flag), wird kein Splitter-Objekt erzeugt. Ein vorher existierender Splitter wird aber auch dann zerstört.

Im Modus CSV soll das Trennzeichen in b natürlich mit dem Trennzeichen in der Tokenliste c übereinstimmen. Parameter b für den Modus csv kann wahlweise mit Präfix csv oder als Einzelzeichen oder in der Unicode-Umschreibung \uXXXX angegeben werden. Beim Einzelzeichen wird Groß/Klein-Schreibung beachtet, bei der Unicode-Umschreibung nicht. Falls in b mehrere Zeichen als Trennzeichen stehen, wird nur das erste Zeichen verwendet, führende Leerzeichen werden aber ignoriert. Umschreibungen von New Line (\n oder \NL), CR (\r oder \CR) und Tabulator (\t oder \TAB) werden erkannt.

Die Methoden exist, destroy und hasNext sind nicht vom Modus des Splitters abhängig.

Alle Methoden mit optionalem Kontext-Namen in Parameter b beziehen sie sich auf den aktuellen Kontext, wenn Parameter b leer ist. Wird in b der Name (Knoten-Name) eines anderen Kontext angegeben, werden die Methoden auf diesen Fremdkontext ausgeführt. Gibt es den in b angegebenen Kontext-Namen nicht, verhalten sich die Methoden, als wenn sie in einem Kontext gerufen werden, in dem kein Splitter-Objekt erzeugt wurde. Als Kontext-Name sind auch die beiden Platzhalter #parent (Kontext des Eltern-Knoten) und #self (eigener Kontext) zulässig. Der Platzhalter #self ist nur für die erweitere Methode link als Ziel-Kontext relevant (siehe unten).

Hinweis: Zugriffe auf einen Splitter eines fremden Kontextes (Fremdkontext) sind in allen Methoden möglich, außer init und add. Die Initialisierung init eines Splitter-Objektes ist nur in dem aktuellen Kontext möglich.

Nach der Initialisierung unterscheidet sich das Verhalten und die Menge der erlaubten Methoden für fix und csv.

Methode destroy oder bomb mit gesetztem Flag first wird nur in der ersten Iteration des aktuellen Kontext ausgeführt.

Wichtiger Hinweis: Die Funktion clear all maps() löscht auch alle Value Splitter.

Weitere Basis-Methoden im Modus fix


Modus

Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

fix

type

Optional: Der Kontext.


String: fix

Das Kennzeichen für Modus fix.

fix

count

Optional: Der Kontext.


Integer: Anzahl der Zeichen im Splitter.

Aktuelle Zeichenzahl.

fix

next

Optional: Der Kontext.

Optional: Flags.

String: Nächster Feldwert.

Liefert den nächsten Feldwert und entfernt ihn aus dem Splitter.

fix

value

Optional: Der Kontext.


String: Rest im Splitter.

Die Rest-Zeichenkette im Splitter.

Wenn Parameter b leer bleibt, bezieht sich die Methode auf den aktuellen Kontext. Mit einem expliziten Kontext kann man auch Eigenschaften eines Splitters in einem anderen Knoten abfragen. Der Wert in b muss dazu der vollständige Name des Knotens sein. Mit dem Platzhalter #parent kann der Kontext des übergeordneten Knoten adressiert werden.

Methode next kann im Modus fix nur auf Felder angewendet werden, weil ein Knoten keine Feldlänge hat. Es werden so viele Zeichen aus dem aktuellen Splitter geliefert und aus dem Splitter entfernt, wie die Feldlänge angibt. Bei Feldlänge 0 wird ein String ohne Zeichen (leerer String) geliefert und nichts aus dem Splitter entfernt. Falls der Splitter keinen Wert mehr enthält, also wenn hasNext den Wert false liefert, wird ebenfalls ein leerer String geliefert.

In Parameter c können für Methode next folgende Flags angegeben werden:

  • trim (Trimmt den Wert).

  • destroy (Zerstört den Splitter nachdem der letzte Wert geliefert wurde).

Ein Flag gilt als gesetzt, wenn der entsprechende Text in Parameter c steht (ignore-case). Kombination ist möglich.

Weitere Basis-Methoden im Modus csv


Modus

Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

csv

type

Optional: Der Kontext.

Optional: Flags.

String: csvdelim

Modus csv und Trennzeichen-Umschreibung \uxxxx. Flag: u oder c.

csv

count

Optional: Der Kontext.


Integer: Anzahl der Feldwerte im Splitter.

Aktuelle Zahl der Feldwerte.

csv

next

Optional: Der Kontext.

Optional: Flags.

String: Nächster Feldwert.

Liefert den nächsten Feldwert und entfernt ihn aus dem Splitter.

csv

value

Optional: Der Kontext.

Optional: CSV-Trenner.

String: Rest im Splitter.

Die restlichen Werte im Splitter als Tokenliste.

Die Verwendung des Parameter b ist wie bei Modus fix, um einen Fremdkontext zu adressieren.

In Methode type kann das Format des Rückgabewertes durch ein optionales Flag in Parameter c gesteuert werden.

  • Mit dem Flag u wird nur das Trennzeichen in Umschreibung \uxxxx geliefert.

  • Mit dem Flag c wird das Zeichen selbst ohne Umschreibung geliefert.

  • Ohne Flag wird der Modus csv, unmittelbar gefolgt von der Umschreibung des Trennzeichens (csv\uxxxx), geliefert.

In Methode next kann im optionalen Parameter c zusätzlich zu trim und destroy noch das Flag trunc (TruncationError) gesetzt werden. In diesem Fall wird ein Fehlerabbruch erfolgen, wenn der mit next gelieferte nächste Feldwert länger als die Feldgröße ist. Das Flag trunc wirkt nur, wenn die Funktion an einem Ziel-Feld hängt. Bei einem Knoten existiert keine Feldlänge zum Vergleich.

In Methode next wird als Rückgabewert ein gültiger String ohne Zeichen (leerer String) geliefert, falls der Splitter keinen Wert mehr enthält.

Methode value liefert die Feldwerte, die sich aktuell im Splitter befinden, als Tokenliste. Wenn in c kein CSV-Trenner steht, wird das Trennzeichen verwendet, mit dem der Splitter initialisiert wurde. Andernfalls wird der Wert aus c als Trenner in der Ausgabe verwendet. Hier können mehrere Zeichen als Trenner gesetzt werden. Eine Unicode-Umschreibung in der Ausgabe der Tokenliste erfolgt nicht. In Parameter c darf ein einzelnes Trennzeichen aber als \uXXXX umschrieben werden.

Wichtiger Hinweis: Falls in Methode value der Trenner aus Parameter c in einem der Feldwerte des Splitters enthalten ist, erfolgt ein Fehlerabbruch.

Basis-Methoden wenn kein Splitter-Objekt im Kontext existiert


Modus

Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

csv

type

Optional: Der Kontext.


no value

Kein Wert.

csv

count

Optional: Der Kontext.


Integer: 0


csv

next

Optional: Der Kontext.


String: ""

Leerer String (Wert mit 0 Zeichen).

csv

value

Optional: Der Kontext.


no value

Kein Wert.

Die Verwendung des Parameter b ist wie bei Modus fix oder csv. Parameter c ist beliebig und wird ignoriert wenn kein Splitter-Objekt existiert.

Erweiterte Methoden

Erweiterte Methoden für Modus fix und csv

Zusammenfügen eines Strukturwertes aus Einzelwerten mit Methode add


Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

add

Optional: fix

Zeichenkette.

Anzahl der Zeichen im Splitter nach Einfügen.

Fügt die Zeichenkette am Ende an.

add

csvdelimiter

Feldwert.

Anzahl der Werte im Splitter nach Einfügen.

Fügt den Wert am Ende an.

Die Methode add fügt an den Wert eines existierenden Splitters die Zeichenkette aus Parameter c an. Der Modus eines existierenden Splitters kann durch Parameter b nicht verändert werden. In diesem Fall wird b ignoriert.

Falls die Methode add in einem Kontext ausgeführt wird, in dem aktuell kein Splitter existiert, wird ein Splitter mit dem Modus b erzeugt und diesem der Wert c als erster Wert hinzugefügt. In diesem Fall bestimmt b den Modus des neuen Splitters. Das entspricht der Methode init. Das CSV-Trennzeichen kann analog Methode init mit Präfix, als Einzelzeichen oder in Umschreibung angegeben werden.

Im Unterschied zu init wird nicht ein Strukturwert mit mehreren Einzelwerten in c erwartet, sondern ein einzelner Wert.

Falls der Modus csv ist, darf das CSV-Trennzeichen nicht in dem Wert enthalten sein, der hinzugefügt wird. Andernfalls erfolgt Fehlerabbruch.

Im Modus fix erfolgt die Formatierung und Ausrichtung des Wertes entsprechend der Feldgröße und Ausrichtung des Feldes, dem die Funktion zugeordnet ist.


  • Bei Feldlänge 0 wird der Wert getrimmt, dann aber mit der gültigen Länge eingefügt.

  • Wenn Feldlänge > 0 und ein Füllwert definiert ist, wird der Wert getrimmt und aufgefüllt bzw. abgeschnitten.

  • Achtung: Wenn kein Füllwert definiert ist, bleibt der Wert unverändert. Dann ist nicht garantiert, dass die Feldlänge angewendet wird.


Wenn die Funktion an einem Knoten hängt, ist diese Formatierung nicht möglich. Man kann den Wert dann nur vorher entsprechend formatieren.

Verbinden mehrerer Knoten zu einem gemeinsamen Kontext mit link


Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

link


Der Ziel-Kontext.

Anzahl der Zeichen/Werte im Splitter.

Verbindet den aktuellen Kontext mit dem Ziel-Kontext.

link

Optional: Der Kontext.

Der Ziel-Kontext.

Anzahl der Zeichen/Werte im Splitter.

Verbindet den Kontext b mit dem Ziel-Kontext.

Mit der Methode link bei leerem Parameter b wird der aktuelle Kontext mit dem in c angegebenen Ziel-Kontext verbunden. Wenn der Ziel-Kontext einen existierenden Splitter besitzt, beziehen sich nachfolgende Methoden auf diesen Splitter. Wenn im Ziel-Kontext kein Splitter existiert, hat der aktuelle Kontext danach ebenfalls keinen Splitter. Hatte der aktuelle Kontext vor der Methode einen eigenen Splitter, wird er zerstört. War der eigene Kontext vorher zu einem anderen Kontext gelinkt, wird dieser Link beendet und durch den neuen Link ersetzt.

Wenn die Methode link mit einem Parameter b gerufen wird, der einen gültigen Kontext-Namen enthält, bezieht sich die Methode auf diesen Fremdkontext anstelle des eigenen Kontextes. Um einen Fremdkontext (Parameter b) mit dem aktuellen Kontext als Ziel (Parameter c) zu linken, muss man den Platzhalter #self für c verwenden, weil c ein Pflichtparameter der Methode ist und nicht leer bleiben kann.

Der Rückgabewert der Methode link hängt vom Modus und der Existenz des Splitters im Ziel-Kontext ab. Er entspricht der Methode count des Ziel-Kontext, er liefert also die Anzahl der Zeichen oder Werte im Splitter des Ziels oder 0, wenn im Ziel-Kontext kein Splitter existiert.

Falls der Ziel-Kontext bereits ein gelinkter Kontext ist, wird der Link zu dessen Ziel-Kontext verfolgt.

Wenn in einem gelinkten Kontext die Methoden destroy, init oder link ausgeführt werden, wird nicht der Splitter im Ziel-Kontext zerstört, sondern nur der bisherige Link zu diesem Splitter.

Erweiterte Methoden für Modus csv (Mengenoperationen)


Konzeptionell besteht ein Unterschied zwischen dem Modus csv und dem Modus fix. Bei einem csv-Splitter werden die Einzelwerte bereits bei Initialisierung separiert. Der csv-Splitter speichert deshalb Feld-Werte. Im Gegensatz dazu kann die FixRecord-Struktur eines fix-Splitters nicht bei Initialisierung bereits in einzelne Felder geteilt werden. Die Feldgrenzen entstehen erst bei der Entnahme eines Wertes mit der Methode next aufgrund der Feldgröße des Feldes auf das die Methode next angewendet wird.

Das ist die Ursache, warum die Mengenoperationen für einen fix-Splitter nicht zur Verfügung stehen. Diese Methoden beziehen sich auf eine Menge von Werten, die es so nur im csv-Splitter gibt.


Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

order

Optional: Der Kontext.

Optional: Flag descend.

Anzahl der Werte im Splitter nach Sortieren.

Sortiert die Feldwerte lexikalisch.

select

Optional: Der Kontext.

Regulärer Ausdruck.

Selektierte Wertemenge als Tokenliste.

Liefert Untermenge der Werte, die den Ausdruck treffen.

x

Optional: Der Kontext.

Regulärer Ausdruck.

Indexliste der selektierte Wertemenge.

Wie select, aber Ergebnis ist Liste der Positionen anstelle der Werte.

unique

Optional: Der Kontext.

Optional: Flag sequence.

Anzahl der Werte im Splitter nach Methode.

Löscht Duplikate aus der Wertemenge.

+

Optional: Der Kontext.

Optional: Flags.

Summe der Werte.

Summiert die Werte numerisch.

Die Methoden order und unique verändern die gespeicherte Wertemenge. Die Methode select liefert nur eine Auswahl der Werte als Rückgabewert in Form einer Tokenliste, ändert aber die Wertemenge im Splitter nicht. Das Trennzeichen der Tokenliste ist das gespeicherte Trennzeichen des csv-Splitters, das bei Initialisierung festgelegt wurde. Wenn man mit dem Select tatsächlich die Wertemenge des Splitters beeinflussen will, muss man den Splitter mit der Tokenliste erneut initialisieren.

Die Sortierung mit order erfolgt lexikalisch aufsteigend. Mit dem Flag d in Parameter c kann lexikalisch absteigend sortiert werden.

Die Löschung von Duplikaten mit Methode unique behält das erste Auftreten eines Wertes bei und entfernt nachfolgende Duplikate. Mit dem Flag s in Parameter c kann man die Einfügereihenfolge beibehalten. In diesem Fall wird das letzte Auftreten eines Wertes beibehalten und die vorherigen Duplikate werden entfernt.

Die Methode + summiert die Werte im Splitter numerisch und liefert die Summe als Ergebnis zurück. Die Werte im Splitter werden nicht verändert. Die Summation basiert auf einer BigDecimal-Addition mit 34 Stellen Genauigkeit und Rundung des Ergebnisses auf HALF_EVEN. Über die optionalen Flags kann das Verhalten bei Fehler gesteuert werden. Default: Leere Werte (höchstens Leerzeichen) werden ignoriert.


  • strict = Alle Fehler führen zum Abbruch: Nicht-numerische Werte und leere Werte.

  • lazy = Alle Fehler werden übersprungen. Die Summe wird nur über die Werte gebildet, die numerisch sind.


Die Flags müssen in Kleinbuchstaben ausgeschrieben werden, Abkürzungen werden nicht erkannt. Ein Dezimalwert darf nur Ziffern, optional ein Vorzeichen und einen Dezimalpunkt enthalten. Ein Komma als Dezimaltrenner wird nicht erkannt.

Erweiterte Methode für Modus csv (Verbindung zu Liste/Map)


Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

read

Optional: Der Kontext.

<Name der Liste>

Splitter mit Werten aus Liste initialisieren.

Übernimmt die Werte aus einer Liste.

read

Optional: Der Kontext.

Map:<Name der Map>

Splitter mit Schlüsseln aus Map initialisieren.

Übernimmt die Keys aus einer Map.

Die Methode read initialisiert das Splitter-Objekt als CSV-Splitter mit den Werten aus der Liste, deren Name als Parameter c übergeben wurde. Der vorherige Inhalt des Splitters geht verloren. Die Reihenfolge der Werte im Splitter ist die gleiche, wie in der Liste. Das Listen-Objekt wird nicht verändert.

Das CSV-Trennzeichen wird automatisch festgelegt. Der Default ist |. Falls in einem der Werte dieses Zeichen enthalten ist, wird \u009c als Trennzeichen verwendet.

Man kann auch die Schlüsselwerte Map als Liste einlesen, wenn in Parameter c der Name einer Map mit vorangestelltem Präfix Map: angegeben wird. Da die Reihenfolge der Schlüssel einer Map nicht definiert ist, ist auch die Reihenfolge im Splitter unbestimmt. Durch nachfolgende Sortierung mit Methode order kann eine definierte Reihenfolge erreicht werden.

Erweiterte Methode für Modus fix (Zeilenumbruch)


Methode a

Parameter b

Parameter c

Ergebnis

Kurzbeschreibung

wrap

Optional: Der Kontext.

Zeilenlänge.

Mehrere Zeilen.

Zeilenumbruch des Textes auf maximale Zeilenlänge.

Die Methode wrap kann nur auf einen Value-Splitter im Modus fix angewendet werden, andernfalls erfolgt ein Fehlerabbruch. Wenn der im Splitter enthaltene Text länger als die maximale Zeilenlänge (Parameter c) ist, wird der Text auf mehrere Zeilen umgebrochen.

Das Ergebnis der Methode ist ein Splitter im Modus csv, der die umgebrochenen Zeilen enthält.

Der Zeilenumbruch erfolgt, wenn möglich, an den Wortgrenzen. Die Leerzeichen und TABs bleiben in den umgebrochenen Zeilen enthalten. Falls in einer Teilzeile keine Wortgrenze enthalten ist, erfolgt der Umbruch hart bei der maximalen Zeilenlänge c. Zeilen, die kürzer sind, als 1/4 der maximalen Zeilenlänge, entstehen nicht. Wortgrenzen, die weiter links in der Teilzeile stehen, als 1/4 der Zeilenlänge, werden nicht zum Umbruch verwendet.

Das CSV-Trennzeichen wird automatisch festgelegt. Der Default ist \n, also das NewLine-Steuerzeichen. Falls im Ursprungstext bereits ein \n enthalten war, wird \u009c als Trennzeichen verwendet. Der Zugriff auf die einzelnen Zeilen soll später mit der Methode next erfolgen, dann ist das CSV-Trennzeichen belanglos.

Die Methode wrap ist die einzige Methode, die den Typ eines erzeugten Splitters ändert (fix csv).