Verarbeitung von Zeichenketten
Die Zeichenkettenverarbeitung, bei der bisher alle Argumente implizit als Feld vom Typ C interpretiert wurden, wird aufgeteilt in Stringverarbeitung für zeichenartige und byteartige Argumente.
Anweisungen zur Zeichenkettenverarbeitung
CLEAR ... WITH
CONCATENATE
CONDENSE
CONVERT TEXT ... INTO SORTABLE CODE
OVERLAY
REPLACE
SEARCH
SHIFT
SPLIT
TRANSLATE ... TO UPPER/LOWER CASE
TRANSLATE ... USING
Bei diesen Anweisungen müssen die Argumente Einzelfelder der Typen C, N, D, T oder STRING sein, zudem sind rein zeichenartige Strukturen erlaubt. Werden Argumente eines anderen Typs übergeben, so wird ein Syntax- oder Laufzeitfehler ausgelöst. Für die Verarbeitung von Bytefolgen, also Operanden des Typs X oder X-STRING, wird eine Teilmenge dieser Funktionalität durch den Zusatz
IN BYTE MODE bereitgestellt. Eine Anweisung CONCATENATE a x b INTO c ist genau dann nicht mehr möglich, wenn a, b, c zeichenartig sind, x jedoch vom Typ X.TRANSLATE ... CODEPAGE ...
TRANSLATE ... NUMBER FORMAT ...
Diese Anweisungen sind in UP verboten. Als Ersatz werden die neuen Konvertierungsklassen angeboten, die unter
Konvertierung von Daten näher beschrieben sind.Vergleichsoperatoren für die Zeichenkettenverarbeitung
CO
CN
CA
NA
CS
NS
CP
NP
Wie bei den Anweisungen zur Stringverarbeitung erfordern diese Operatoren Einzelfelder der Typen C, N, D, T oder STRING als Argumente, außerdem sind wiederum rein zeichenartige Strukturen zugelassen. Für Bytefolgen werden eigene Vergleichsoperatoren angeboten, die durch das Präfix BYTE- definiert werden.
Funktionen zur Stringverarbeitung
Die Funktion STRLEN arbeitet nur mit zeichenartigen Feldern und liefert die Länge in Zeichen zurück. Für die Länge von Bytefolgen steht die neue Funktion XSTRLEN zur Verfügung.
Die Funktion CHARLEN lieferte unter NUS bisher den Wert 1 für ein Textfeld, das mit einem Single-Byte-Zeichen beginnt. Für ein Textfeld, das mit einem Double-Byte-Zeichen beginnt, wird der Wert 2 zurückgeliefert. Unter US wird CHARLEN den Wert 1 liefern, falls text mit einem einfachen Unicode-Zeichen beginnt. Falls text mit einem Unicode-Doppelzeichen aus der Surrogate Area beginnt, wird 2 zurückgeliefert.
Die Funktion NUMOFCHAR liefert die Anzahl der Zeichen eines Strings oder eines zeichenartigen Feldes. In Single-Byte Codepages verhält sich diese Funktion wie STRLEN. In Multi-Byte Codepages werden Zeichen, die mehr als 1 Byte belegen, trotzdem mit der Länge 1 gezählt.
Ausgaben in Felder und Listen
Bei WRITE ... TO waren beliebige flache Datentypen als Ziel erlaubt, die wie C-Felder behandelt wurden. In UP gilt nun für WRITE ... TO ... die Einschränkung, daß das Zielfeld zeichenartig sein muß. Bei der Tabellenvariante WRITE ... TO itab INDEX idx muß der Zeilentyp der Tabelle zeichenartig sein. Offset und Längenangaben werden dabei zeichenweise gezählt.
Mit WRITE konnten bisher beliebige flache Strukturen ausgegeben werden. Wenn das Quellfeld bei WRITE eine flache Struktur Ist, dann muß diese in UP rein zeichenartig sein. Folgende Anweisungen sind davon betroffen:
WRITE f.
WRITE f TO g[+off][(len)].
WRITE (name) TO g.
WRITE f TO itab[+off][(len)] INDEX idx.
WRITE (name) TO itab[+off][(len)] INDEX idx.
Im Zusammenhang mit
Strukturerweiterungen sind die im Dictionary verwendeten Kategorien zu beachten.