Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Vergleichsbedingung

&pagelevel(4)&pagelevel

Funktion

Eine Vergleichsbedingung bewirkt einen Vergleich zwischen zwei Operanden, die auch ein Literal, ein Index oder ein arithmetischer Ausdruck sein können.

Format


{  bezeichner-1 

 | literal-1

 | arithmetischer-ausdruck-1

 | index-1

vergleichsoperator

{  bezeichner-2

 | literal-2

 | arithmetischer-ausdruck-2

 | index-2

}


Syntaxregeln

  1. Der erste und der zweite Operand einer Vergleichsbedingung dürfen nicht beide Literale sein. Es dürfen auch nicht beide Operanden gleichzeitig NULL sein.

  2. Der Vergleichsoperator muss einer der in Tabelle 20 aufgeführten Operatoren sein. Es muss ihm je ein Leerzeichen vorausgehen und folgen.

    Operator

    Bedeutung

    IS [NOT] GREATER THAN
    IS [NOT] >

    [Nicht] größer als

    IS [NOT] LESS THAN
    IS [NOT] <

    [Nicht] kleiner als

    IS [NOT] EQUAL TO
    IS [NOT] =

    [Nicht] gleich

    IS GREATER THAN OR EQUAL TO
    IS > =

    Größer oder gleich

    IS LESS THAN OR EQUAL TO
    IS <=

    Kleiner oder gleich

    Tabelle 20: Vergleichsoperatoren 

    Die Sonderzeichen >, <, = sind hier nicht unterstrichen, damit sie nicht mit anderen Sonderzeichen verwechselt werden.

  3. Der Vergleichsoperator bezeichnet die Art des Vergleichs, der in einer Vergleichsbedingung ausgeführt werden soll.

  4. Sind in einer Vergleichsbedingung Daten der Klassen objekt oder zeiger beteiligt, dürfen nur Vergleichsoperatoren mit der Bedeutung „gleich“ oder „nicht gleich“ verwendet werden.

  5. Sind in einer Vergleichsbedingung Daten der Klassen objekt oder zeiger beteiligt, müssen der linke und rechte Operand von der gleichen Kategorie sein.

  6. Der Vergleich von stark typisierten Datengruppen ist nicht erlaubt. Nur die Datenelemente aus stark typisierten Datengruppen können miteinander verglichen werden.

  7. Die zulässigen Vergleiche und die Art des Vergleichs sind in Tabelle 21 angegeben:.

Rechter
Operand


Linker
Operand

Grup-
pe

Al-
pha-
be-
tisch

Al-
pha-
nu-
me-
risch

Na-
tio-
nal

Nu-
me-
risch

Ex-
pres-
sion

Index-
name

Index-
date-
nfeld

Ob-
jekt

Zei-
ger
(Poin-
ter)

Gruppe

an

an

an

-

an

-

-

-

-

-

Alphabetisch

an

an

an

ant

-

-

-

-

-

-

Alphanumerisch

an

an

an

ant

anu,i,d

-

-

-

-

-

National

-

ant

ant

nt

nnu,i

-

-

-

-

-

Numerisch

an

-

anu,i,d

nnu,i

nu

nu

ix2,i

-

-

-

Expression

-

-

-

-

nu

nu

ix2,i

-

-

-

Indexname

-

-

-

-

ix2,i

ix2,i

ix1

ix3

-

-

Indexdatenfeld

-

-

-

-

-

-

ix3

ix3

-

-

Objekt

-

-

-

-

-

-

-

-

ob

-

Zeiger (Pointer)

-

-

-

-

-

-

-

-

-

pt

Tabelle 21: Zulässige Vergleiche verschiedener Operanden1)

1) Tabelleneinträge:

i= nur für ganze Zahlen (integer)

dbei alphanumerischen Literalen nur für numerische Datenfelder mit USAGE DISPLAY erlaubt




-Vergleich ist nicht erlaubt

nuVergleich von numerischen Operanden

anVergleich von alphanumerischen Operanden

ntVergleich von nationalen Operanden

ixVergleich von Indexnamen oder Indexdatenfeldern

obVergleich von Objektreferenzen

ptVergleich von Zeigern (Pointer)

antVergleich von alphanumerischen und nationalen Operanden

anuVergleich von alphanumerischen und ganzzahligen numerischen Operanden

nnu= Vergleich von nationalen und ganzzahligen numerischen Operanden

Vergleich von numerischen Operanden (nu)

Wenn zwei numerische Operanden verglichen werden, wird dazu ihr algebraischer Wert unabhängig von dem verwendeten Datenformat (USAGE-Klausel) verwendet. Die Länge, d.h. die Anzahl der Ziffern, die sie enthalten, ist nicht entscheidend.
Numerische Operanden ohne Vorzeichen werden bei Vergleichen als positiv betrachtet.Null wird als eindeutiger Wert betrachtet, unabhängig vom Vorzeichen.

Beispiel 8-5

-50 ist kleiner als +5
+75 ist größer als +5
-100 ist kleiner als -10
-0 ist gleich +0

Vergleich von alphanumerischen mit ganzzahligen numerischen Operanden (anu)

Der numerische Operand muss ein ganzzahliges Literal oder ein ganzzahliges Datenfeld mit USAGE DISPLAY sein. Der hier beschriebene Compiler lässt jedoch auch andere Datenformate zu.

  1. Ist der alphanumerische Operand ein Datenelement oder ein alphanumerisches Literal, wird der numerische Operand so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem alphanumerischen Datenelement übertragen wurde. Die Länge des alphanumerischen Datenfeldes entspricht der Ziffernanzahl in der Beschreibung des numerischen Datenfeldes, wobei Skalenstellenzeichen P nicht mitgezählt werden.

  2. Ist der alphanumerische Operand eine Datengruppe, wird der numerische Operand so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einer Datengruppe mit derselben Größe wie das numerische Datenfeld übertragen wurde.

In beiden Fällen wird anschließend das gedachte Datenfeld mit dem alphanumerischen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von alphanumerischer Operanden (an).

Vergleich von nationalen mit ganzzahligen numerischen Operanden (nnu)

Der numerische Operand muss ein ganzzahliges Literal oder ein ganzzahliges Datenfeld sein. Er wird so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem nationalen Datenelement übertragen wurde. Die Länge des nationalen Datenfeldes entspricht der Ziffernanzahl in der Beschreibung des numerischen Datenfeldes, wobei Ska lenstellenzeichen P nicht mitgezählt werden.

Anschließend wird das gedachte nationalen Datenfeld mit dem nationalen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von nationalen Operanden (nt).

Vergleich von alphanumerischen Operanden (an)

Wenn zwei alphanumerische Operanden verglichen werden, wird der Vergleich entsprechend der Sortierfolge der PROGRAM COLLATING SEQUENCE durchgeführt (siehe „OBJECT-COMPUTER-Paragraf").

Es gilt zwei Fälle zu beachten:

  1. Vergleich von Operanden gleicher Länge

    Das Programm vergleicht die Zeichen entsprechender Zeichenstellen miteinander. Es wird an der höchstwertigen Stelle begonnen (das heißt linksbündig) und der Vergleich so lange fortgesetzt, bis entweder zwei ungleiche Zeichen auftreten oder bis das Ende der Operanden erreicht ist.
    Sind alle Zeichen paarweise gleich, werden die Operanden als gleich betrachtet. Zwei Operanden mit der Länge Null sind ebenfalls gleich.
    Tritt ein Paar von ungleichen Zeichen auf, so wird festgestellt, welches Zeichen eine höhere Ordnungszahl innerhalb der Sortierfolge hat. Der Operand, der das höhere Zeichen enthält, wird als der größere Operand betrachtet.

    Beispiel 8-6

    linker Operand

    rechter Operand

    keine COLLATING SEQUENCE oderCOLLATING SEQUENCE NATIVE

    COLLATING SEQUENCE ALPHATAB (siehe Beispiel 6-5 im Abschnitt "ALPHABET-Klausel" )

    +-*

    ABC

    ’kleiner’
    Das 1. Zeichen linker Operand „+“ ist kleiner als das 1. Zeichen rechter Operand „A“.

    ’größer’
    Das 1.Zeichen linker Operand „+“ ist größer als das 1. Zeichen rechter Operand „A“, weil „A“ in der Sortierfolge ALPHATAB die Ordnungszahl 1 hat.

    RADE

    RABE

    ’größer’
    Das 3. Zeichen linker Operand „D“ ist größer als das 3. Zeichen rechter Operand „B“.

    ’gleich’
    Das 3.Zeichen linker Operand „D“ ist gleich dem 3. Zeichen rechter Operand „B“, weil „D“ und „B“ in der Sortierfolge ALPHATAB beide die Ordnungszahl 1 haben.

    XYZ

    XYZ

    ’gleich’
    Alle Zeichen sind paarweise gleich.

    ’gleich’
    Alle Zeichen sind paarweise gleich.

  2. Vergleich von Operanden ungleicher Länge

    Der Vergleich verläuft so, als ob der kürzere Operand rechts mit so vielen alphanumerischen Leerzeichen aufgefüllt wäre, so dass die Operanden die gleiche Länge haben.

    Es sind dann die beschriebenen Regeln aus a) „Vergleich von Operanden gleicher Länge" anzuwenden.

    Beispiel 8-7

    linker Operand

    rechter Operand

    keine COLLATING SEQUENCE oderCOLLATING SEQUENCE NATIVE

    COLLATING SEQUENCE ALPHATAB (siehe Beispiel 6-5 im Abschnitt "ALPHABET-Klausel" )

    SMITH

    SMITHY

    ’kleiner’
    Der linke Operand wird mit Leerzeichen zu „SMITH'BLANK'“ aufgefüllt. Das 6. Zeichen linker Operand „'BLANK'“ ist kleiner als das 6. Zeichen rechter Operand „Y“.

    ’kleiner’
    Der linke Operand wird mit Leerzeichen zu „SMITH'BLANK'“ aufgefüllt. Das 6. Zeichen linker Operand „'BLANK'“ ist kleiner als das 6. Zeichen rechter Operand „Y“.

    AB

    ABBA

    ’kleiner’
    Der linke Operand wird mit Leerzeichen zu „AB'BLANK''BLANK'“ aufgefüllt. Das 3. Zeichen linker Operand „'BLANK'“ ist kleiner als das 3. Zeichen rechter Operand „B“.

    ’größer’
    Der linke Operand wird mit Leerzeichen zu „AB'BLANK''BLANK'“ aufgefüllt. Das 3. Zeichen linker Operand „'BLANK'“ ist größer als das 3. Zeichen rechter Operand „B“, weil „B“ in der Sortierfolge ALPHATAB die Ordnungszahl 1 hat.

Vergleich von nationalen Operanden (nt)

Es gilt zwei Fälle zu beachten:

  1. Vergleich von Operanden gleicher Länge

    Das Programm vergleicht die Zeichen entsprechender Zeichenstellen miteinander. Es wird an der höchstwertigen Stelle begonnen (das heißt linksbündig) und der Vergleich so lange fortgesetzt, bis entweder zwei ungleiche Zeichen auftreten oder bis das Ende der Operanden erreicht ist.
    Sind alle Zeichen paarweise gleich, werden die Operanden als gleich betrachtet. Zwei Operanden mit der Länge Null sind ebenfalls gleich.
    Tritt ein Paar von ungleichen Zeichen auf, so wird festgestellt, welches Zeichen eine höhere Ordnungszahl innerhalb der nationalen Sortierfolge hat. Der Operand, der das höhere Zeichen enthält, wird als der größere Operand betrachtet.

  2. Vergleich von Operanden ungleicher Länge

    Der Vergleich verläuft so, als ob der kürzere Operand rechts mit so vielen nationalen Leerzeichen aufgefüllt wäre, so dass die Operanden die gleiche Länge haben.

    Es sind dann die beschriebenen Regeln aus a) „Vergleich von Operanden gleicher Länge" anzuwenden.

Vergleich von alphanumerischen mit nationalen Operanden (ant)

Der alphanumerische Operand wird so behandelt, als ob er entsprechend den Regeln der MOVE-Anweisung zu einem nationalen Datenelement übertragen und konvertiert wurde. Das nationale Datenfeld hat genau so viele Zeichenstellen wie das alphanumerischen Datenfeld.

Anschließend wird das gedachte Datenfeld mit dem nationalen Operanden verglichen. Dies geschieht entsprechend den Regeln für den Vergleich von nationalen Operanden (nt).

Beispiel 8-8

linker,
alphanumerischer
Operand

rechter,nationalerOperand

Ergebnis des Vergleichs

123

XYZ

’kleiner’
Der linke Operand wird in die nationale Darstellung konvertiert. Das 1. Zeichen linker Operand „1“ ist in der nationalen Sortierfolge kleiner als das 1. Zeichen rechter Operand „X“.

AB

ABBA

’kleiner’
Der linke Operand wird in die nationale Darstellung konvertiert und mit Leerzeichen zu „AB'BLANK''BLANK'“ aufgefüllt. Das 3. Zeichen linker Operand „'BLANK'“ ist in der nationalen Sortierfolge kleiner als das 3. Zeichen rechter Operand „B“.

Vergleich von Indexnamen oder Indexdatenfelder (ix)

  1. Sind beide Operanden Indexnamen, dann werden die den beiden Indizes entsprechenden Tabellenelementnummern miteinander verglichen (ix1).

  2. Ist ein Operand numerisch (nur ganzzahlig), so wird diese Zahl als Tabellenelementnummer angesehen und mit der Tabellenelementnummer verglichen, die dem Indexnamen entspricht (ix2).

  3. Ist ein Operand ein Indexdatenfeld, so werden die aktuellen Werte der Felder (ohne Umrechnung zu Tabellenelementnummern!) verglichen (ix3).

Vergleich von Objektreferenzen (ob)

Die Bedingung „gleich“ ist nur dann wahr, wenn bezeichner-1 und bezeichner-2 das gleiche Objekt referenzieren.

Vergleich von Zeigern (pt)

Die Bedingung „gleich“ ist nur dann wahr, wenn bezeichner-1 und bezeichner-2 die gleiche Speicherzelle referenzieren.