Unterzeichenfolgen

In einem Kontext, in dem auf eine Zeichenvariable verwiesen wird, können Sie stattdessen auf eine Unterzeichenfolge (eine sequenzielle Untergruppe der Zeichen in der betreffenden Variablen) verweisen. Beispiel: Wenn eine Variable namens myVar den Wert "ABCD" aufweist, können Sie auf "BC", das zweite und dritte Zeichen, als myVar[2:3] verweisen.

Darüber hinaus können Sie eine Unterzeichenfolge auf der linken Seite einer Zuordnungsanweisung angeben, wenn die Zielunterzeichenfolge eine feste Länge hat. Der Unterzeichenfolgenbereich wird mit Leerzeichen aufgefüllt, wenn die Quelle kürzer als die Unterzeichenfolge ist, und der Quellentext wird abgeschnitten, wenn er länger als die Unterzeichenfolge ist.

Es kann ein Problem auftreten, wenn Sie Daten aus einer Quellenvariablen einer Unterzeichenfolge derselben Variablen zuordnen (beispielsweise myResult[1:5] = myResult); eine derartige Verwendung von sich überlappendem Speicher wird im EGL-Debugger und in mit EGL generiertem Java™-Code unterstützt, nicht jedoch in mit EGL generiertem COBOL-Code.

EGL stellt eine Reihe von Systemfunktionen bereit, die mit Unterzeichenfolgen arbeiten:

Syntax

Syntaxdiagramm für Unterzeichenfolgen
Textvariable
Eine Zeichen- oder HEX-Variable, jedoch kein Literal. Die Variable kann eine Systemvariable oder ein Feldgruppenelement sein. Für Zeichenfolgen mit begrenzter Länge gelten besondere Hinweise, die weiter unten erläutert werden.
vonIndex
Das erste Zeichen, das aus der Variablen extrahiert werden soll, wobei 1 der Index des ersten Zeichens in der Variablen ist. Sie können einen numerischen Ausdruck verwenden, der in eine ganze Zahl aufgelöst wird. Der Ausdruck darf jedoch keinen Funktionsaufruf enthalten.
bisIndex
Das letzte Zeichen von Interesse in der Variablen, wobei 1 wiederum das erste Zeichen in der Zeichenvariablen darstellt, 2 das zweite Zeichen usw. Sie können einen numerischen Ausdruck verwenden, der in eine ganze Zahl aufgelöst wird. Der Ausdruck darf jedoch keinen Funktionsaufruf enthalten.

Eine Ausnahmebedingung tritt auf, wenn der Wert für vonIndex größer ist als der Wert für bisIndex.

Der Wert beider Indizes stellt eine Byteposition dar, sofern Textvariable nicht den Typ DBCHAR oder UNICODE hat. Ist dies der Fall, stellt der Wert eine Doppelbytezeichenposition dar.

Wenn Textvariable eine Zeichenfolge (ohne Längenbegrenzung) ist, liegt der Wert des Index zwischen 1 und der Länge der Zeichenfolge.

Wenn Textvariable eine Zeichenfolge mit begrenzter Länge ist, liegt der Wert des Index zwischen 1 und der in der Variablendeklaration angegebenen Länge. Befinden sich an den angegebenen Positionen keine Zeichen, hängt der Inhalt der Zielunterzeichenfolge vom Zieltyp ab. Wenn der Zieltyp STRING lautet, ist das Ergebnis eine leere Zeichenfolge; andernfalls wird das Ziel mit Leerzeichen aufgefüllt.

Die Zählung beginnt auch bei bidirektionalen Sprachen wie Arabisch oder Hebräisch beim Zeichen ganz links.

Beispiele

Betrachten Sie das folgende Beispiel:
  limited string(20); 	
  s string;  	
  limited = "123456789"; 	
  s = limited[11:12]; // Kein Fehler; Wert von 's' ist "" (leere Zeichenfolge).
  s = limited[8:12];  // Kein Fehler; Wert von 's' ist "89". 	
  limited = s[8:12];  // Fehler, da 's' keine Längenbegrenzung hat.  
                      // Die letzte gültige Position ist die mit dem letzten Zeichen.
Wenn Sie eine Unterzeichenfolge aus einer Zeichenfolge mit begrenzter Länge auf der linken Seite einer Zuordnungsanweisung verwenden und wenn bisIndex jenseits der Position mit dem letzten Zeichen liegt, ersetzt EGL jedes Nullzeichen zwischen dem Wert, der bereits in der Zeichenfolge mit Längenbegrenzung liegt, und dem zugeordneten Inhalt durch ein Leerzeichen:
  limited string(20) = "123456789";	
  s string = "abc";
  limited[12:14] = s; // kein Fehler; Wert von 'limited' wird zu "123456789  abc"
:

Feedback