Version 6.3.8 für Windows
 —  Statements  —

EXAMINE

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


Syntax 1 — EXAMINE

EXAMINE [DIRECTION-clause]
  [FULL [VALUE [OF]]]

operand1

  SUBSTRING (operand1,operand2,operand3)
  POSITION-clause    
  [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.

Syntax-Beschreibung — Syntax 1

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

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     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:

DIRECTION-clause
Suchrichtung:

Mit dieser Klausel legen Sie die Suchrichtung fest. Weitere Informationen siehe DIRECTION-Klausel weiter unten.

operand1
Zu untersuchendes Feld:

operand1 ist das Feld, dessen Inhalt untersucht werden soll.

Ist operand1 eine dynamische Variable, kann deren Länge über eine REPLACE-Operation auf einen höheren oder niedrigeren Wert gesetzt werden; durch eine DELETE-Operation kann deren Länge auf "0" gesetzt werden. Die aktuelle Länge einer dynamischen Variablen kann über die Systemvariable *LENGTH ermittelt werden.

Sie finden allgemeine Informationen über dynamische Variablen im Abschnitt Große und dynamische Variablen/Felder.

POSITION-clause
POSITION-Klausel:

Mit dieser Klausel können Sie für die Untersuchung eine Start- und Endeposition innerhalb von operand1 angeben (oder den Substring von operand1). Weitere Informationen siehe POSITION-Klausel weiter unten.

operand4
Suchwert:

operand4 ist der für die Untersuchung zu verwendende Wert.

Weitere Informationen zu operand4 und operand6 siehe operand6, der in der unten beschriebenen DELETE REPLACE-Klausel benutzt wird.

FULL
FULL-Option:

Wenn Sie für einen Operanden FULL angeben, so wird der gesamte Wert, einschließlich nachfolgender Leerstellen, verarbeitet; ohne FULL werden dem Wert nachfolgende Leerstellen bei der Verarbeitung ignoriert.

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 SUBSTRING ermöglicht es Ihnen, nur einen bestimmten Teil des Feldes zu untersuchen. In der SUBSTRING-Klausel geben Sie nach dem Feldnamen (operand1) zunächst die erste Stelle (operand2) und dann die Länge (operand3) des Feldteils, der untersucht werden soll, an.

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:

  1. Wenn Sie operand2 weglassen, wird ab Anfang des Feldes untersucht.
  2. Wenn Sie operand3 weglassen, wird ab der angegebenen Stelle (operand2) bis zum Ende des Feldes untersucht.
  3. Wenn SUBSTRING in Verbindung mit einer dynamischen Variable benutzt wird, verhält sich das Feld wie eine Variable fester Länge, d.h. die Länge (*LENGTH) ändert sich nicht als Ergebnis der EXAMINE-Operation, ungeachtet der Tatsache, ob eine DELETE- oder REPLACE-Operation ausgeführt wurde oder nicht.
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 PATTERN. operand4 kann dann die folgenden Platzhalter für nicht zu untersuchende Stellen enthalten:

  • Ein Punkt (.), Fragezeichen (?) oder Unterstrich (_) steht für eine einzelne Stelle, die nicht untersucht werden soll.

  • Ein Stern (*) oder Prozentzeichen (%) steht für eine beliebige Anzahl von Stellen, die nicht untersucht werden sollen.

Beispiel:

Mit PATTERN 'NAT*AL' könnten Sie ein Feld nach jedem Wert, in dem NAT und AL vorkommt, absuchen, ganz gleich, welche und wieviele andere Zeichen zwischen NAT und AL stehen (dies würde z.B. auf die Werte NATURAL und NATIONAL zutreffen, aber auch auf NATAL).

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 DELETE-Option dieser Klausel wird zum Löschen jedes Suchwertes (operand4) benutzt, der in operand1 gefunden wird.

Die REPLACE-Option wird zum Austauschen jedes in operand1 gefundenen Suchwertes (operand4) durch den in operand6 angegebenen Wert benutzt.

Siehe DELETE REPLACE-Klausel weiter unten.

GIVING-clause
GIVING-Klausel:

Siehe GIVING-Klausel weiter unten.

DIRECTION-Klausel

Diese Klausel bestimmt die Suchrichtung.

 

FORWARD

DIRECTION BACKWARD
  operand8

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand8 C S       A1                       ja nein

Syntax-Element-Beschreibung:

FORWARD Wenn Sie FORWARD angeben, wird der Feldinhalt von links nach rechts untersucht.
BACKWARD Wenn Sie BACKWARD angeben, wird der Feldinhalt von rechts nach links untersucht.
operand8 Wenn Sie operand8 angeben, wird die Suchrichtung durch den Inhalt von operand8 bestimmt. operand8 muss mit Format/Länge A1 definiert werden. Wenn operand8 ein "F" enthält, dann ist die Suchrichtung FORWARD; wenn operand8 ein "B" enthält, dann ist die Suchrichtung BACKWARD. Alle anderen Werte sind ungültig und werden zurückgewiesen: wenn operand8 eine Konstante ist, wird der Wert zur Kompilierzeit zurückgewiesen; wenn operand8 eine Variable ist, wird der Wert zur Laufzeit zurückgewiesen.

Anmerkung:
Wenn die DIRECTION-Klausel nicht angegeben ist, wird die Standardrichtung FORWARD benutzt.

POSITION-Klausel

Mit dieser Klausel können Sie für die Untersuchung eine Start- und Endeposition innerhalb von operand1 angeben (oder den Substring von operand1).

[[STARTING] FROM [POSITION] operand9]

ENDING AT

[POSITION] operand10

THRU

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand9 C S         N P I                 ja nein
operand10 C S         N P I                 ja nein

Syntax-Element-Beschreibung:

FROM operand9 operand9 definiert die Startposition für die Untersuchung.
ENDING AT / THROUGH operand10 operand10 definiert die Endeposition für die Untersuchung.

Startposition (operand9) und Endeposition (operand10) sind relativ zu operand1 oder dem Substring von operand1 und werden beide verarbeitet.

Die Suche beginnt an der Startposition und endet an der Endeposition.

Wenn Start- und/oder Endeposition nicht angegeben sind, gelten die Standardwerte für die Position. Der Wert wird duch die Suchrichtung bestimmt:

Richtung Standardstartposition Standardendeposition
FORWARD 1 (erstes Zeichen) Länge von operand1 (letztes Zeichen)
BACKWARD Länge von operand1 (letztes Zeichen) 1 (erstes Zeichen)

Mit dieser Lösung ist EXAMINE BACKWARD ... identisch mit EXAMINE BACKWARD ... FROM *LENGTH(...) THRU 1 und funktioniert wie erwartet.

Anmerkung:
Eine Suche wird nicht durchgeführt wenn die Suchrichtung FORWARD ist und die Startposition größer als die Endeposition ist, oder wenn die Suchrichtung BACKWARD ist und die Startposition kleiner als die Endeposition ist.

DELIMITERS-Option

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:

ABSOLUTE
Absolute Suche:

Standardmäßig gilt die Option ABSOLUTE; d.h. die zu suchende Zeichenkette wird auch gefunden, wenn sie von anderen Zeichen umgeben und Teil einer längeren Zeichenkette ist.

WITH DELIMITERS
Suchwert mit beliebigen Begrenzungszeichen:

Mit WITH DELIMITERS wird ein Wert gesucht, dem je ein Leerzeichen oder irgendein anderes Zeichen, das weder ein Buchstabe noch eine Ziffer ist, vor- und nachgestellt ist.

WITH DELIMITERS operand5
Suchwert mit bestimmten Begrenzungszeichen:

Mit WITH DELIMITERS operand5 wird ein Wert gesucht, der von dem/den in operand5 angegebenen Zeichen eingegrenzt ist.

DELETE REPLACE-Klausel

[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     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 FIRST angeben, wird nur der erste identische Wert gelöscht/ausgetauscht.

Anmerkungen:

  1. Wenn die REPLACE-Operation zur Generierung von mehr Zeichen führt als in operand1 passen, erhalten Sie eine Fehlermeldung.
  2. Wenn operand1 eine dynamische Variable ist, kann eine 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.
  3. Falls ein Laufzeitfehler auftritt, bleibt das geprüfte Feld unverändert.

Suchen und Ersetzen mit mehreren Werten

Der Suchwert (operand4) und der Ersetzungswert (operand6) können auch als Array-Felder definiert werden. Dadurch ist es mit nur einem EXAMINE-Statement möglich, mehrere unterschiedliche Muster in dem geprüften Feld (operand1) zu ersetzen. Der Such- und der Ersetzungsoperand brauchen nicht die gleiche Anzahl an Ausprägungen zu haben. Es muss lediglich die Übertragungskompatibilität zwischen diesen Feldern gewährleistet sein, d.h. operand4:=operand6 muss eine gültige Operation sein; siehe auch Zuweisungen bei Arrays im Leitfaden zur Programmierung.

Die Operationslogik für die Suche mit mehreren Werten arbeitet wie folgt:

Beispiel 1:

Dieses Beispiel zeigt die Ersetzung des Kleiner-als-Zeichens (<), des Größer-als-Zeichens (>) und des Zeichens für das Kaufmännische Und (&) durch die entsprechenden HTML-Zeichen '&lt;', '&gt;' und '&amp;'.

DEFINE DATA LOCAL
1 #HTML  (A/1:3) DYNAMIC INIT <'&lt;','&gt;','&amp;'>  
1 #TAB   (A/1:3) DYNAMIC INIT <'<','>','&'>
1 #DOC(A) DYNAMIC  /* document to be replaced 
END-DEFINE
#DOC := 'a&lt;&lt;b&amp;b&gt;c&gt;'
WRITE #DOC (AL=30) 'before'
/* Replace #DOC using #HTML to #TAB (n:1 replacement)
EXAMINE   #DOC FOR  #HTML(*)  REPLACE  #TAB(*)  
/* '&lt;'  is replaced by '<'  (4:1 replacement)
/* '&gt;'  is replaced by '>'  (4:1 replacement)
/* '&amp;' is replaced by '&'  (5:1 replacement)
WRITE #DOC (AL=30) 'after'
END

Beispiel 2:

Dieses Beispiel zeigt die Ersetzung des Musters 'AA', 'Aa' und 'aA' durch '++', des Musters 'BB', 'Bb' und 'bB' durch '--' und des Musters 'CC', 'Cc' und 'cC' durch '**'.

DEFINE DATA LOCAL                                     
1 #SV     (A2/1:3,1:3) INIT (1,V) <'AA','BB','CC'>    
                            (3,V) <'Aa','Bb','Cc'>    
                            (2,V) <'aA','bB','cC'>    
1 #RV     (A2/1:3)     INIT       <'++','--','**'>    
1 #STRING (A20)        INIT <'AAABbbbbBCCCcccCaaaA'>  
END-DEFINE                                            
DISPLAY #STRING   /* shows   'AAABbbbbBCCCcccCaaaA'   
EXAMINE #STRING FOR #SV(*,*)                          
   AND REPLACE WITH #RV(*)                            
DISPLAY #STRING   /* shows   '++A--bb--****c**aa++'   
END

GIVING-Klausel

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-Option

[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.

Seitenanfang

Syntax 2 — EXAMINE TRANSLATE

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.

Syntax-Beschreibung — Syntax 2

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 SUBSTRING ermöglicht es Ihnen, nur einen bestimmten Teil des Feldes umzusetzen. In der SUBSTRING-Klausel geben Sie nach dem Feldnamen (operand1) zunächst die erste Stelle (operand2) und dann die Länge (operand3) des Feldteils, der umgesetzt werden soll, an.

Um zum Beispiel die 5. bis einschließlich 12. Stelle eines Feldes #A umzusetzen, geben Sie folgendes an:

EXAMINE SUBSTRING(#A,5,8) AND TRANSLATE ...

Anmerkung:
Wenn Sie operand2 weglassen, wird ab Anfang des Feldes umgesetzt. Wenn Sie operand3 weglassen, wird ab der ersten Stelle bis zum Ende des Feldes umgesetzt.

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:
Falls für ein umzusetzendes Zeichen in der Umsetzungstabelle mehr als eine Umsetzung definiert ist, gilt die jeweils letzte Umsetzung.

INVERTED Wenn Sie das Schlüsselwort INVERTED angeben, wird die Umsetzungstabelle (operand4) in umgekehrter Richtung verwendet, d.h. die Umsetzungsrichtung wird umgekehrt.

Seitenanfang

Syntax 3 — EXAMINE für Unicode-Grapheme

EXAMINE [FULL [VALUE [OF]]]

operand1

SUBSTRING (operand1,operand2,operand3)
[POSITION-clause]  
[FOR] [CHARPOSITION operand4] [CHARLENGTH operand5]  
[GIVING] POSITION IN operand6 [[GIVING] LENGTH IN operand7]

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Syntax-Beschreibung - Syntax 3

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 A       N P I                 ja nein
operand5 C S A       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 FULL für einen Operanden angegeben wird, wird der gesamte Wert, einschließlich der nachfolgenden Leerzeichen abgearbeitet. Wenn FULL nicht angegeben wird, werden nach folgende Leerzeichen im Operanden ignoriert.

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 SUBSTRING ermöglicht es Ihnen, nur einen bestimmten Teil des Feldes zu untersuchen. In der SUBSTRING-Klausel geben Sie nach dem Feldnamen (operand1) zunächst die erste Stelle (operand2) und dann die Länge (operand3) des Feldteils an, der untersucht werden soll. operand2 und operand3 werden als Code-Einheiten angegeben.

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:

  1. Wenn Sie operand2 weglassen, wird ab Anfang des Feldes (Position 1) untersucht.
  2. Wenn Sie operand3 weglassen, wird ab der angegebenen Stelle bis zum Ende des Feldes untersucht.
  3. Wenn SUBSTRING in Verbindung mit einer dynamischen Variable benutzt wird, verhält sich das Feld wie eine Variable fester Länge, d.h. die Länge (*LENGTH) ändert sich nicht als Ergebnis der EXAMINE-Operation, ungeachtet der Tatsache, ob eine DELETE- oder REPLACE-Operation ausgeführt wurde oder nicht.
POSITION-clause
POSITION-Klausel:

Bereichswerte für FROM und THRU werden in Form von Code-Einheiten angegeben. Weitere Informationen siehe POSITION-Klausel unter Syntax 1.

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-Klausel angegeben wird; in diesem Fall ist die Startposition 1.

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 CHARPOSITION-Klausel angegeben wird; in diesem Fall wird die Länge von der Startposition bis zum Ende der Zeichenkette zurückgegeben.

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-Klausel angegeben wird.

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 GIVING POSITION-Klausel angegeben wird.

Anmerkungen:

  1. Es muss entweder die CHARPOSITION- oder die CHARLENGTH-Klausel oder beide angegeben werden.
  2. Es muss entweder die GIVING POSITION- oder die GIVING LENGTH-Klausel oder beide angegeben werden.

Seitenanfang

Beispiele

Beispiel 1 — EXAMINE

** 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

Beispiel 2 — EXAMINE SUBSTRING, PATTERN, TRANSLATE

** 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-

Beispiel 3 — EXAMINE TRANSLATE

** 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-

Beispiel 4 — EXAMINE für Unicode-Grapheme

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.

Seitenanfang