cmp()
Zwei Parameter miteinander vergleichen.
Syntax:
int32 |
cmp ( param1, param2, int32:options = _COMP_DEFAULT ) |
Parameter:
param1 |
Der erste Parameter des Vergleiches. |
param2 |
Der zweite Parameter des Vergleiches. |
options |
Ein Bitfeld mit Optionen für den Vergleich.
Ohne Angabe wird _COMP_DEFAULT verwendet.
Weitere Details im Textbereich. |
Beschreibung:
Die beiden Parameter param1 und param werden miteinander verglichen.
Dabei wird zuerst der Typ und danach der Wert verglichen.
Der Parmeter options:
Die folgenden Konstanten legen Optionen für Vergleichsfunktionen fest.
Die Konstanten definieren hierzu einzelne Bits
und können mittels OR-Operation ('|') miteinander verknüpft werden.
- _COMP_DEFAULT := 0
Dieses ist der neutrale Standardwert.
- _COMP_LEX
Zeichenketten sollen lexikalisch und nicht via ASCII-Werte verglichen werden.
Ist dieses Flag beim Vergleich auf Identität (cmpEQ()) gesetzt,
dann gelten zwei Zeichenketten als identisch, wenn sie lexikalisch gleich sind.
In diesem Falle wird die Option _COMP_LEX_EQUAL impliziert.
- _COMP_LEX_EQUAL
Diese Option gilt nur bei lexikalischen Vergleichen.
Würde der lexikalische Vergleich den Wert _CMP_EQUAL_LEX als Funktionsergebnis liefern,
dann wird stattdessen der Wert _CMP_EQUAL geliefert,
um die Gleichheit der beiden Zeichenketten zu melden.
- _COMP_TYPE
Normalerweise werden numerische Werte mit unterschiedlichem Typ
(INT32, INT64, FLOAT) miteinander verglichen,
indem der Typ eines der beiden Operanden angepaßt wird.
Ist jedoch _COMP_TYPE gesetzt, dann werden Werte mit unterschiedlichem Typ
auf jeden Fall als ungleich angesehen und nur der Wertetyp miteinander verglichen.
- _COMP_RESULT_IDENT
Normalerweise wird liefert die Vergleichsfunktionen bei Ungleichheit
einen Status ungleich Null.
Dessen Absolutwert gibt den Grund für die Ungleichheit an.
Ist jedoch _COMP_RESULT_IDENT bei einem Vergleich von Zeichenketten oder Listen gesetzt,
dann wir bei Ungleichheit die 'Anzahl der Zeichen/Elemente plus _CMP_STR_LEN_ADD',
die in beiden Zeichenketten identisch sind, geliefert.
Das Vorzeichen des Ergebnisses sagt nach wie vor aus,
welche der beiden Zeichenketten kleiner und welche größer ist.
Die Option _COMP_RESULT_IDENT wird bei lexikalischen Vergleichen ignoriert.
Funktionsergebnis: INT32
Sind beide Parameter identisch, dann wird _CMP_EQUAL (==0) als Funktionsergebnis geliefert.
Ist die param1<param2, dann wird ein negativer Wert als Funktionsergebnis geliefert.
Andernfalls ist param1>param2 und es wird positiver Wert als Funktionsergebnis geliefert.
Im Absolutwert des Ergebnisses sind noch weitere Informationen enthalten.
Die absoluten Rückgabewerte im einzelnen:
- _CMP_EQUAL := 0
Beide Parameter sind int Typ und Wert identisch.
Ist Option _COMP_TYPE nicht gesetzt, dann wird _CMP_EQUAL auch bei zwei
unterschiedlichen numerischen Typen mit selben Wert geliefert.
Dieser Wert wird auch bein einem lexikalischen Vergleich von Zeichenketten geliefert,
wenn die Optionen _COMP_LEX und _COMP_LEX_EQUAL gesetzt sind und wenn die
Zeichenketten lexikalisch identsich sind, sich aber binär unterscheiden.
Bei einem Vergleich von zwei NONE-Werten wird
immer _CMP_EQUAL als Funktionsergebnis geliefert.
- _CMP_DIFF_TYPE
Bei einem unterschiedlichen Typ wird der Wert _CMP_DIFF_TYPE mit einem der
beiden Vorzeichen geliefert. Für unterschiedlichen Typen gilt die Ordnung:
NONE < INT32 < INT64 < FLOAT < STRING < LIST < MAP.
Sollte allerdings die Option _COMP_TYPE NICHT gesetzt sein,
dann werden bei einem Vergleich zweier numerischer Typen nur die Werte miteinander verglichen.
- _CMP_DIFF_NUM
Bei einem numerischen Vergleich mit unterschiedlichen Werten wird _CMP_DIFF_NUM,
mit einem der beiden Vorzeichen als Funktionsergebnis geliefert.
- _CMP_EQUAL_LEX
Dieser Wert wird bei einem lexikalischen Vergleich
(Option _COMP_LEX, aber nicht _COMP_LEX_EQUAL) von Zeichenketten geliefert,
wenn die Zeichenketten lexikalisch identisch sind, sich aber binär unterscheiden.
- _CMP_DIFF_LEX
Dieser Wert wird bei einem lexikalischen Vergleich
(Option _COMP_LEX) von Zeichenketten geliefert,
wenn die Zeichenketten sich lexikalisch unterscheiden.
- _CMP_DIFF_TEXT_LEN
Es wurden zwei Zeichenketten binär (Option _COMP_LEX nicht gesetzt) miteinander verglichen.
Alle in beiden Zeichenketten existierenden Zeichen sind identisch.
Jedoch unterscheiden sich beide Zeichenketten in der Anzahl der Zeichen
und damit in den zusätzlichen Zeichen der längeren Zeichenketten.
Ist jedoch die Option _COMP_RESULT_IDENT gesetzt, dann wird bei Ungleichheit
die Anzahl der identischen Zei9chen als Funktionsergebnis geliefert,
wobei zur Anzahl der Wert _CMP_STR_LEN_ADD vor der Vorzeichenwahl addiert wird.
- _CMP_DIFF_TEXT_CHAR
Dieser Wert wird bei einem binären Vergleich von Zeichenketten
(Option _COMP_LEX nicht gesetzt) geliefert,
wenn die Zeichenketten sich in einem existierenden Zeichen unterscheiden.
Ist jedoch die Option _COMP_RESULT_IDENT gesetzt, dann wird bei Ungleichheit
die Anzahl der identischen Zei9chen als Funktionsergebnis geliefert,
wobei zur Anzahl der Wert _CMP_STR_LEN_ADD vor der Vorzeichenwahl addiert wird.
- _CMP_DIFF_LIST_LEN
Es wurden zwei Listen miteinander verglichen.
Alle in beiden Listen existierenden Elemente sind identisch.
Jedoch unterscheiden sich beide Felder in der Anzahl der Elemente
und damit in den zusätzlichen Elementen des längeren Feldes.
Ist jedoch die Option _COMP_RESULT_IDENT bei einem Vergleich von zwei Listen gesetzt,
dann wird bei Ungleichheit die Anzahl der identischen Elemente als Funktionsergebnis geliefert,
wobei zur Anzahl der Wert _CMP_STR_LEN_ADD vor der Vorzeichenwahl addiert wird.
- _CMP_DIFF_LIST_ELEM
Zwei Elemente einer Liste an identischer Position unterscheiden sich.
Ist die Option _COMP_RESULT_IDENT bei einem Vergleich von zwei Listen gesetzt,
dann wird bei Ungleichheit die Anzahl der identischen Elemente als Funktionsergebnis geliefert,
wobei zur Anzahl der Wert _CMP_STR_LEN_ADD vor der Vorzeichenwahl addiert wird.
- _CMP_DIFF_MAP_LEN
Es wurden zwei Maps miteinander verglichen. Alle in beiden Felder existierenden
und vorne stehenden Elemente sind identisch in Schlüssel und Wert.
Jedoch unterscheiden sich beide Felder in der Anzahl der Elemente
und damit in den zusätzlichen Elementen des längeren Feldes.
- _CMP_DIFF_MAP_ELEM
Zwei Elemente einer Map an identischer Position unterscheiden sich
in Schlüssel oder Wert.
- _CMP_STR_LEN_ADD
Wird ein Wert <-_CMP_STR_LEN_ADD oder ein Wert >+_CMP_STR_LEN_ADD als
Funktionsergebnis geliefert, dann war die Option _COMP_RESULT_IDENT gesetzt und es
wurde ein Vergleich von zwei Zeichenketten oder zwei Listen vorgenommen.
Der Absolutwert des Ergebnisses enthält dann die Anzahl der Zeichen bzw. Elemente,
die identisch waren.
Weitere Details: _CMP_DIFF_TEXT_LEN, _CMP_DIFF_TEXT_CHAR,
_CMP_DIFF_LIST_LEN und _CMP_DIFF_LIST_ELEM.
Siehe auch:
cmpLex()
cmpEQ()
Weitere ähnliche Funktionen:
Vergleiche |
Funktion |
Kurzinfo |
cmp() |
Zwei Parameter miteinander vergleichen. |
cmpEQ() |
Zwei Parameter miteinander auf Identität vergleichen. |
cmpLex() |
Zwei Parameter miteinander vergleichen und Zeichenketten dabei lexikalisch verglecihen. |
compareFile() |
Eine Datei mit lokalen Daten vergleichen. |
compareFiles() |
Den Inhalt zweier Dateien vergleichen. |
compareFilesEx() |
Einen Ausschnitt des Inhaltes zweier Dateien vergleichen. |
compareLeft() |
Eine Zeichenkette mit dem Anfang gleicher Länge aus einer anderen Zeichenkette vergleichen. |
compareLeftEQ() |
Eine Zeichenkette mit dem Anfang gleicher Länge aus einer anderen Zeichenkette auf Gleichkeit untersuchen. |
compareMid() |
Eine Zeichenkette mit einem Mittelstück gleicher Länge aus einer anderen Zeichenkette vergleichen. |
compareMidEQ() |
Eine Zeichenkette mit einem Mittelstück gleicher Länge aus einer anderen Zeichenkette auf Gleichkeit untersuchen. |
compareRight() |
Eine Zeichenkette mit dem Ende gleicher Länge aus einer anderen Zeichenkette vergleichen. |
compareRightEQ() |
Eine Zeichenkette mit dem Ende gleicher Länge aus einer anderen Zeichenkette auf Gleichkeit untersuchen. |