Dieses Dokument behandelt folgende Themen:
Verwandte Statements: ADD | COMPRESS | COMPUTE | DIVIDE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT
Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen
EXAMINE |
[FULL [VALUE [OF ]]]
|
operand1 | ||
SUBSTRING (operand1,operand2,operand3)
|
||||
[FOR ] [FULL [VALUE
[OF ]]] [PATTERN ] operand4
|
||||
[DELIMITERS-option] | ||||
{[DELETE-REPLACE-clause] [GIVING-clause]} |
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Das Statement EXAMINE
dient dazu, den Inhalt eines
alphanumerischen oder binären Feldes (oder eines Bereiches von Feldern
innerhalb eines Arrays) nach einer bestimmten Zeichenkette abzusuchen und
um
zu zählen, wie oft eine bestimmte Zeichenkette vorkommt;
die Byte-Position zurückzugeben, an der eine gesuchte Zeichenkette zuerst erscheint;
die signifikante Länge des Inhalts eines Feldes zurückzugeben, d.h. die Feldlänge ohne nachfolgende Leerzeichen;
die Ausprägungsnummer (Indizes) eines Array-Feldes zurückzugeben, wo eine Zeichenkette zuerst gefunden wurde;
eine Zeichenkette auszutauschen;
eine Zeichenkette zu löschen.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C* | S | A | A | U | B | ja | nein | ||||||||||||
operand2 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand3 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand4 | C | S | A | U | B | ja | nein |
* operand1 darf nur eine Konstante sein,
wenn Sie die GIVING
-Klausel verwenden, aber nicht, wenn Sie die
DELETE
-REPLACE
-Klausel verwenden.
* Format B von operand2 und operand3 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.
Syntax-Element-Beschreibung:
operand1 |
Zu untersuchendes Feld:
operand1 ist das Feld, dessen Inhalt untersucht werden soll. Ist operand1 eine dynamische Variable,
kann deren Länge über eine |
---|---|
operand4 |
Suchwert:
operand4 ist der für die Untersuchung zu verwendende Wert. |
FULL |
FULL-Option:
Wenn Sie für einen Operanden |
SUBSTRING |
SUBSTRING-Option:
Normalerweise wird der ganze Inhalt des Feldes untersucht, und zwar vom Anfang des Feldes bis zum Ende bzw. bis zum letzten signifikanten Zeichen. Die Option Um zum Beispiel die 5. bis einschließlich 12. Stelle eines Feldes #A zu untersuchen, geben Sie folgendes an: EXAMINE SUBSTRING(#A,5,8). Anmerkungen:
|
PATTERN |
PATTERN-Option:
Wenn Sie das Feld nach einem Wert absuchen möchten, der Variablen
enthält, d.h. Platzhalter für Stellen, die bei der Suche nicht berücksichtigt
werden sollen, verwenden Sie die Option
Beispiel: Mit |
DELIMITERS-option |
DELIMITERS-Option:
Diese Option wird zum Suchen eines Wertes benutzt, der Delimiter darstellt. Einzelheiten, siehe DELIMITERS-Option weiter unten. |
DELETE-REPLACE-clause |
DELETE REPLACE-Klausel:
Die Die Siehe DELETE REPLACE-Klausel weiter unten. |
GIVING-clause |
GIVING-Klausel:
Siehe GIVING-Klausel weiter unten. |
ABSOLUTE
|
||
[WITH
DELIMITERS ]
|
||
[WITH
DELIMITERS ]
operand5
|
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand5 | C | S | A | B | ja | nein |
Syntax-Element-Beschreibung:
[AND ]
|
DELETE [FIRST ]
|
||
REPLACE [FIRST ] [WITH ] [FULL [VALUE [OF ]]]
operand6
|
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand6 | C | S | A | U | B | ja | nein |
Syntax-Element-Beschreibung:
DELETE |
Lösch-Option:
Dient zum Löschen der ersten (oder aller) Ausprägung(en) des Suchwertes (operand4) im Inhalt von operand1. |
---|---|
REPLACE |
Austausch-Option:
Wird benutzt zum Austauschen der ersten (oder aller) Ausprägung(en) des Suchwertes (operand4) in operand1 durch den in operand6 angegebenen Austauschwert. |
FIRST |
Löschen/Austauschen des ersten identischen
Werts:
Wenn Sie das Schlüsselwort |
Anmerkungen:
REPLACE
-Operation zur Generierung von mehr
Zeichen führt als in operand1 passen, erhalten Sie
eine Fehlermeldung.
REPLACE
-Operation dazu führen, dass seine Länge
vergrößert oder verkleinert wird; eine DELETE
-Operation kann dazu
führen, dass seine Länge auf Null (0) gesetzt wird. Die aktuelle Länge einer
dynamischen Variablen kann mittels der Systemvariable
*LENGTH
ermittelt werden. Allgemeine Informationen zu dynamischen Variablen siehe
Dynamische Variablen
benutzen.
GIVING
|
|||||||||
NUMBER
|
|||||||||
[GIVING ]
|
POSITION
|
[IN ]
|
operand7 | ||||||
LENGTH
|
|||||||||
[GIVING ]
|
INDEX
|
[IN ]
|
operand7...3 |
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand7 | S | N | P | I | ja | ja |
Syntax-Element-Beschreibung:
GIVING | Wenn nur das Schlüsselwort GIVING
angegeben wird, entspricht dies GIVING NUMBER (Voreinstellung).
|
---|---|
NUMBER | Wird benutzt, um die Zahl zu erhalten, wie oft der zu suchende Wert (operand4) in dem Feld (operand1) gefunden wird, dessen Inhalt überprüft werden soll. |
POSITION | Mit GIVING POSITION erhalten Sie die
Byte-Position, die der erste gefundene Wert
(operand4) innerhalb von
operand1 (bzw. des Substrings von
operand1) innehat.
|
LENGTH | Mit GIVING LENGTH erhalten Sie die
Länge von operand1
(bzw. des Substrings von operand1), nachdem alle
DELETE - bzw. REPLACE -Operationen abgeschlossen sind.
Nachfolgende Leerzeichen werden ignoriert.
|
operand7 | Die Anzahl der Ausprägungen des Suchwertes. Wenn
auch die Option REPLACE
FIRST oder DELETE
FIRST benutzt wird, ist die Zahl nicht größer als 1.
|
INDEX operand7...3 | Siehe GIVING INDEX-Option weiter unten. |
[GIVING ]
INDEX [IN ]
operand7
3
|
Diese Option steht nur zur Verfügung, wenn das zu überprüfende zugrundeliegende Feld ein Array-Feld ist.
Syntax-Element-Beschreibung:
INDEX | Mit GIVING INDEX erhalten Sie die
Nummer der Ausprägung (Index) von operand1, in
der der erste gefundene Wert (operand4)
enthalten ist.
|
---|---|
operand7...3 | operand7 muss genauso oft angegeben werden wie operand1 Dimensionen hat (höchstens dreimal). operand7 enthält Null, wenn der gesuchte Wert in keiner der Ausprägungen enthalten ist. |
Anmerkung:
Falls der Indexbereich von operand1 die
Ausprägung Null enthält (z.B. 0:5), ist der Wert 0 in
operand7 zweideutig. In diesem Falle sollte eine
zusätzliche GIVING
NUMBER
-Klausel verwendet werden, um festzustellen, ob der
gesuchte Wert tatsächlich vorkommt oder nicht.
EXAMINE
|
operand1 | [AND ]
|
||||||||
SUBSTRING
|
(operand1,operand2,operand3) | |||||||||
TRANSLATE
|
INTO
|
UPPER
|
[CASE ]
|
|||||||
LOWER
|
||||||||||
USING [INVERTED ]
operand4 |
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Das Statement EXAMINE TRANSLATE
dient dazu, die in einem
Feld enthaltenen Zeichen in Groß- oder Kleinschreibung oder in andere Zeichen
umzusetzen.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | S | A | A | B | ja | nein | |||||||||||||
operand2 | C | S | N | P | I | B* | ja | nein | |||||||||||
operand3 | C | S | N | P | I | B* | ja | nein | |||||||||||
operand4 | S | A | A | B | ja | nein |
*Format B von operand2 und operand3 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.
Syntax-Element-Beschreibung:
EXAMINE operand1 |
Umsetzung des kompletten
Feldinhalts:
operand1 ist das Feld, dessen Inhalt umgesetzt werden soll. |
---|---|
EXAMINE SUBSTRING operand1 operand2 operand3 |
Umsetzung von Teilen des
Feldinhalts:
Normalerweise wird der Inhalt des gesamten Feldes umgesetzt. Die Option Um zum Beispiel die 5. bis einschließlich 12. Stelle eines Feldes
EXAMINE SUBSTRING(#A,5,8) AND TRANSLATE ... Anmerkung: |
TRANSLATE INTO UPPER CASE |
Umsetzung in Großbuchstaben:
Der Inhalt von operand1 wird in Großbuchstaben umgesetzt. |
TRANSLATE INTO LOWER CASE |
Umsetzung in Kleinbuchstaben:
Der Inhalt von operand1 wird in Kleinbuchstaben umgesetzt. |
TRANSLATE USING operand4 |
Zu benutzende Umsetzungstabelle:
operand4 ist die Umsetzungstabelle, die für die Zeichenumsetzung verwendet werden soll. Die Tabelle muss Format/Länge A2 oder B2 haben. Anmerkung: |
INVERTED | Wenn Sie das Schlüsselwort INVERTED angeben, wird
die Umsetzungstabelle (operand4) in umgekehrter
Richtung verwendet, d.h. die Umsetzungsrichtung wird umgekehrt.
|
EXAMINE
[FULL [VALUE [OF ]]] |
operand1 |
||
SUBSTRING (operand1,operand2,operand3 )
|
|||
[FOR ]
|
|
||
[GIVING ]
POSITION IN
operand6 [[GIVING ]
LENGTH IN
operand7 ]
|
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Unter einem Graphem versteht ein Benutzer normalerweise ein Zeichen. In den meisten Fällen ist eine UTF-16 Code-Einheit (= U-Formatzeichen) ein Graphem, allerdings kann ein Graphem auch aus mehreren Code-Einheiten bestehen. Beispiele sind: eine Folge von einem Basiszeichen gefolgt von Kombinationszeichen oder einem Ersatz-Paar. Weitere Informationen zu Graphemen und anderen Unicode-Begriffen entnehmen Sie dem Dokument The Unicode Standard unter http://www.unicode.org/.
Das Statement EXAMINE
für U-Format-Operanden spricht im
Allgemeinen Code-Einheiten an. Allerdings ist es bei CHARPOSITION
-
und CHARLENGTH
-Klauseln möglich, die Startposition und Länge (als
Code-Einheiten) einer Graphem-Sequenz zu erhalten. Die zurückgegeben
Code-Einheitswerte können dann in anderen Statements/Klauseln benutzt werden,
für die Code-Einheitsoperanden erforderlich sind (zum Beispiel in einer
SUBSTRING
-Klausel).
Weitere Informationen zur Syntax des EXAMINE
-Statements,
siehe auch Unicode and Code Page Support in
Natural Programming
Language, Abschnitt
Statements,
EXAMINE.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | U | B | ja | nein | ||||||||||||
operand2 | C | S | N | P | I | B* | ja | nein | |||||||||||
operand3 | C | S | N | P | I | B* | ja | nein | |||||||||||
operand4 | C | S | N | P | I | ja | nein | ||||||||||||
operand5 | C | S | N | P | I | ja | nein | ||||||||||||
operand6 | C | S | N | P | I | ja | nein | ||||||||||||
operand7 | C | S | N | P | I | ja | nein |
* Format B von operand2 und operand3 kann nur mit einer Länge von kleiner gleich 4 benutzt werden.
Syntax-Element-Beschreibung:
FULL |
FULL-Option:
Wenn |
---|---|
SUBSTRING operand1 operand2 operand3 |
SUBSTRING-Option:
Normalerweise wird der ganze Inhalt des Feldes untersucht, und zwar vom Anfang des Feldes bis zum Ende bzw. bis zum letzten signifikanten Zeichen. Die Option Um zum Beispiel die 5. bis einschließlich 12. Stelle eines Feldes
EXAMINE SUBSTRING (#A,5,8) Anmerkungen:
|
CHARPOSITION operand4 |
CHARPOSITION-Klausel:
operand4 legt die Startposition (als
Unicode-Grapheme) der Graphem-Sequenz fest. Die entsprechende Position wird in
operand6 in Form von Code-Einheiten zurückgegeben.
Diese Klausel kann weggelassen werden, wenn die |
CHARLENGTH operand5 |
CHARLENGTH-Klausel:
operand5 legt die Länge der
Graphem-Sequenz (als Unicode-Grapheme) fest. Die Länge der Graphem-Sequenz wird
in Form von Code-Einheiten in operand7
zurückgegeben. Diese Klausel kann weggelassen werden, wenn die
|
GIVING POSITION IN operand6 |
GIVING POSITION-Klausel:
operand6 enthält (als Code-Einheiten)
die Startposition der von operand4 und
operand5 definierten Graphem-Sequenz. Wenn
operand1 weniger als
operand4 Grapheme hat, wird Null (0) zurückgegeben.
Diese Klausel kann weggelassen werden, wenn die |
GIVING LENGTH IN operand7 |
GIVING LENGTH-Klausel:
operand7 enthält (als Code-Einheiten)
die Länge der mit operand4 und
operand5 definierten Graphem-Sequenz. Wenn
operand1 weniger als
operand4+operand5
Grapheme hat, wird 0 zurückgegeben. Diese Klausel kann weggelassen werden, wenn
die |
Anmerkungen:
CHARPOSITION
- oder die
CHARLENGTH
-Klausel oder beide angegeben werden.
GIVING POSITION
- oder die
GIVING LENGTH
-Klausel oder beide angegeben werden.
** Example 'EXMEX1': EXAMINE ************************************************************************ DEFINE DATA LOCAL 1 #TEXT (A40) 1 #A (A1) 1 #START (N2) 1 #NMB1 (N2) 1 #NMB2 (N2) 1 #NMB3 (N2) 1 #NMBEX2 (N2) 1 #NMBEX3 (N2) 1 #NMBEX4 (N2) 1 #POSEX5 (N2) 1 #LGHEX6 (N2) 1 #NMBEX7 (N2) 1 #NMBEX8 (N2) END-DEFINE * WRITE 'EXAMPLE 1 (GIVING NUMBER, WITH DELIMITER)' MOVE 'ABC A B C .A. .B. .C. -A- -B- -C- ' TO #TEXT ASSIGN #A = 'A' EXAMINE #TEXT FOR #A GIVING NUMBER #NMB1 EXAMINE #TEXT FOR #A WITH DELIMITER GIVING NUMBER #NMB2 EXAMINE #TEXT FOR #A WITH DELIMITER '.' GIVING NUMBER #NMB3 WRITE NOTITLE '=' #NMB1 '=' #NMB2 '=' #NMB3 * WRITE / 'EXAMPLE 2 (WITH DELIMITER, REPLACE, GIVING NUMBER)' WRITE '=' #TEXT EXAMINE #TEXT FOR #A WITH DELIMITER '-' REPLACE WITH '*' GIVING NUMBER #NMBEX2 WRITE '=' #TEXT '=' #NMBEX2 * WRITE / 'EXAMPLE 3 (REPLACE, GIVING NUMBER)' WRITE '=' #TEXT EXAMINE #TEXT ' ' REPLACE WITH '+' GIVING NUMBER #NMBEX3 WRITE '=' #TEXT '=' #NMBEX3 * WRITE / 'EXAMPLE 4 (FULL, REPLACE, GIVING NUMBER)' WRITE '=' #TEXT EXAMINE FULL #TEXT ' ' REPLACE WITH '+' GIVING NUMBER #NMBEX4 WRITE '=' #TEXT '=' #NMBEX4 * WRITE / 'EXAMPLE 5 (DELETE, GIVING POSITION)' WRITE '=' #TEXT EXAMINE #TEXT '+' DELETE GIVING POSITION #POSEX5 WRITE '=' #TEXT '=' #POSEX5 * WRITE / 'EXAMPLE 6 (DELETE, GIVING LENGTH)' WRITE '=' #TEXT EXAMINE #TEXT FOR 'A' DELETE GIVING LENGTH #LGHEX6 WRITE '=' #TEXT '=' #LGHEX6 * * NEWPAGE * MOVE 'ABC A B C .A. .B. .C. -A- -B- -C- ' TO #TEXT * ASSIGN #A = 'A B C' ASSIGN #START = 6 * WRITE / 'EXAMPLE 7 (SUBSTRING, GIVING NUMBER)' WRITE '=' #TEXT EXAMINE SUBSTRING(#TEXT,#START,9) FOR #A GIVING NUMBER #NMBEX7 WRITE '=' #TEXT '=' #NMBEX7 * WRITE / 'EXAMPLE 8 (PATTERN, GIVING NUMBER)' WRITE '=' #TEXT EXAMINE #TEXT FOR PATTERN '-A-' GIVING NUMBER #NMBEX8 WRITE '=' #TEXT '=' #NMBEX8 * END
Ausgabe des Programms EXMEX1
:
EXAMPLE 1 (GIVING NUMBER, WITH DELIMITER) #NMB1: 4 #NMB2: 3 #NMB3: 1 EXAMPLE 2 (WITH DELIMITER, REPLACE, GIVING NUMBER) #TEXT: ABC A B C .A. .B. .C. -A- -B- #TEXT: ABC A B C .A. .B. .C. -*- -B- #NMBEX2: 1 EXAMPLE 3 (REPLACE, GIVING NUMBER) #TEXT: ABC A B C .A. .B. .C. -*- -B- #TEXT: ABC+++A+B+C+++.A.++.B.++.C.++++-*-++-B- #NMBEX3: 18 EXAMPLE 4 (FULL, REPLACE, GIVING NUMBER) #TEXT: ABC+++A+B+C+++.A.++.B.++.C.++++-*-++-B- #TEXT: ABC+++A+B+C+++.A.++.B.++.C.++++-*-++-B-+ #NMBEX4: 1 EXAMPLE 5 (DELETE, GIVING POSITION) #TEXT: ABC+++A+B+C+++.A.++.B.++.C.++++-*-++-B-+ #TEXT: ABCABC.A..B..C.-*--B- #POSEX5: 4 EXAMPLE 6 (DELETE, GIVING LENGTH) #TEXT: ABCABC.A..B..C.-*--B- #TEXT: BCBC...B..C.-*--B- #LGHEX6: 18
EXAMPLE 7 (SUBSTRING, GIVING NUMBER) #TEXT: ABC A B C .A. .B. .C. -A- -B- #TEXT: ABC A B C .A. .B. .C. -A- -B- #NMBEX7: 1 EXAMPLE 8 (PATTERN, GIVING NUMBER) #TEXT: ABC A B C .A. .B. .C. -A- -B- #TEXT: ABC A B C .A. .B. .C. -A- -B- #NMBEX8: 1
** Example 'EXMEX2': EXAMINE TRANSLATE ************************************************************************ DEFINE DATA LOCAL 1 #TEXT (A50) 1 #TAB (A2/1:10) 1 #START (N2) END-DEFINE * MOVE 'ABC A B C .A. .B. .C. -A- -B- -C- ' TO #TEXT * MOVE 'AX' TO #TAB(1) MOVE 'BY' TO #TAB(2) MOVE 'CZ' TO #TAB(3) * * WRITE 'EXAMPLE 1 (USING TRANSLATION TABLE)' WRITE '=' #TEXT EXAMINE #TEXT TRANSLATE USING #TAB(*) WRITE NOTITLE '=' #TEXT * WRITE / 'EXAMPLE 2 (USING INVERTED TRANSLATION TABLE)' WRITE '=' #TEXT EXAMINE #TEXT TRANSLATE USING INVERTED #TAB(*) WRITE NOTITLE '=' #TEXT * WRITE / 'EXAMPLE 3 (USING SUBSTRING, LOWER CASE)' WRITE '=' #TEXT ASSIGN #START = 13 EXAMINE SUBSTRING(#TEXT,#START,15) TRANSLATE INTO LOWER CASE WRITE '=' #TEXT END
Ausgabe des Programms EXMEX2
:
EXAMPLE 1 (USING TRANSLATION TABLE) #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- #TEXT: XYZ X Y Z .X. .Y. .Z. -X- -Y- -Z- EXAMPLE 2 (USING INVERTED TRANSLATION TABLE) #TEXT: XYZ X Y Z .X. .Y. .Z. -X- -Y- -Z- #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- EXAMPLE 3 (USING SUBSTRING, LOWER CASE) #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- #TEXT: ABC A B C .a. .b. .c. -A- -B- -C-
** Example 'EXMEX2': EXAMINE TRANSLATE ************************************************************************ DEFINE DATA LOCAL 1 #TEXT (A50) 1 #TAB (A2/1:10) 1 #START (N2) END-DEFINE * MOVE 'ABC A B C .A. .B. .C. -A- -B- -C- ' TO #TEXT * MOVE 'AX' TO #TAB(1) MOVE 'BY' TO #TAB(2) MOVE 'CZ' TO #TAB(3) * * WRITE 'EXAMPLE 1 (USING TRANSLATION TABLE)' WRITE '=' #TEXT EXAMINE #TEXT TRANSLATE USING #TAB(*) WRITE NOTITLE '=' #TEXT * WRITE / 'EXAMPLE 2 (USING INVERTED TRANSLATION TABLE)' WRITE '=' #TEXT EXAMINE #TEXT TRANSLATE USING INVERTED #TAB(*) WRITE NOTITLE '=' #TEXT * WRITE / 'EXAMPLE 3 (USING SUBSTRING, LOWER CASE)' WRITE '=' #TEXT ASSIGN #START = 13 EXAMINE SUBSTRING(#TEXT,#START,15) TRANSLATE INTO LOWER CASE WRITE '=' #TEXT END
Ausgabe des Programms EXMEX2
:
EXAMPLE 1 (USING TRANSLATION TABLE) #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- #TEXT: XYZ X Y Z .X. .Y. .Z. -X- -Y- -Z- EXAMPLE 2 (USING INVERTED TRANSLATION TABLE) #TEXT: XYZ X Y Z .X. .Y. .Z. -X- -Y- -Z- #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- EXAMPLE 3 (USING SUBSTRING, LOWER CASE) #TEXT: ABC A B C .A. .B. .C. -A- -B- -C- #TEXT: ABC A B C .a. .b. .c. -A- -B- -C-
Dieses Beispiel veranschaulicht die Analyse einer Unicode-Zeichenkette
mit den Zeichen ä
und ü
. Beide Zeichen sind als
Basiszeichen, gefolgt von einem Kombinationszeichen festgelegt: ä
ist als U+0061
, gefolgt von U+0308
kodiert, und
ü
ist als U+0075
, gefolgt von U+0308
kodiert.
DEFINE DATA LOCAL 1 #U (U20) 1 #START (I2) 1 #POS (I2) 1 #LEN (I2) END-DEFINE #U := U'AB'-UH'00610308'-U'CD'-UH'00750308'-U'EF' * REPEAT #START := #START + 1 EXAMINE #U FOR CHARPOSITION #START CHARLENGTH 1 GIVING POSITION IN #POS LENGTH IN #LEN * INPUT (AD=O) MARK POSITION #POS IN FIELD *#U ' UNICODE-STRING:' #U (AD=MI) // ' CHARACTER NO.:' #START (EM=9) / 'STARTS AT BYTE POSITION:' #POS (EM=9) / ' AND THE LENGTH IS:' #LEN (EM=9) WHILE #POS NE 0 END-REPEAT END
Ausgabe:
Großrechner-Umgebungen: | Windows-, UNIX- und OpenVMS-Umgebungen (mit Natural Web I/O Interface): |
---|---|
UNICODE-STRING: ABa?CDu?EF CHARACTER NO.: 1 STARTS AT BYTE POSITION: 1 AND THE LENGTH IS: 1 |
UNICODE-STRING: ABäCDüEF CHARACTER NO.: 1 STARTS AT BYTE POSITION: 1 AND THE LENGTH IS: 1 |
Drücken Sie die Eingabetaste um fortzufahren. | Drücken Sie die Eingabetaste um fortzufahren. |
UNICODE-STRING: ABa?CDu?EF CHARACTER NO.: 2 STARTS AT BYTE POSITION: 2 AND THE LENGTH IS: 1 |
UNICODE-STRING: ABäCDüEF CHARACTER NO.: 2 STARTS AT BYTE POSITION: 2 AND THE LENGTH IS: 1 |
Drücken Sie die Eingabetaste um fortzufahren. | Drücken Sie die Eingabetaste um fortzufahren. |
Beachten Sie, dass das Zeichen in Position 3 eine Kombinationszeichenfolge ist und zwei Code-Einheiten lang ist. | |
UNICODE-STRING: AB<b>a</b>?CDu?EF CHARACTER NO.: 3 STARTS AT BYTE POSITION: 3 AND THE LENGTH IS: 2 |
UNICODE-STRING: AB<b>ä</b>CDüEF CHARACTER NO.: 3 STARTS AT BYTE POSITION: 3 AND THE LENGTH IS: 2 |
Und so weiter. | Und so weiter. |