Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

@COMPARE (Format 2) - Vergleichen zweier Arbeitsdateien zeilenweise

&pagelevel(3)&pagelevel

Mit Format 2 der Anweisung @COMPARE können die Inhalte zweier Arbeitsdateien zeilenweise verglichen werden. Das Vergleichsergebnis legt der EDT in einer Arbeitsdatei ab. Diese wird vor dem Ablegen des Ergebnisses gelöscht. Wahlweise ist auch eine Ausgabe des Ergebnisses nach SYSLST, im L-Modus auch nach SYSOUT möglich.

Operation

Operanden

F-Modus / L-Modus

@COMPARE

{ [procnr1] WITH procnr2 | procnr1 }

   [LIST [procnr3] ] [,procnr4]

procnr1

Nummer der Arbeitsdatei, die verglichen werden soll. Ist procnr1 nicht
angegeben, so wird die aktuelle Arbeitsdatei mit procnr2 verglichen.

procnr2

Nummer der Arbeitsdatei, mit der verglichen wird. Ist procnr2 nicht
angegeben, so wird procnr1 mit der aktuellen Arbeitsdatei verglichen.

LIST

Bei Angabe von LIST wird das Ergebnis in die Arbeitsdatei procnr3 oder
bei fehlender Angabe von procnr3 nach SYSLST ausgegeben.

Ist LIST nicht angegeben, wird das Ergebnis im L-Modus desDialogbetriebs
nach SYSOUT ausgegeben, im Stapelbetrieb nach SYSLST ausgegeben
und im F-Modus in die Arbeitsdatei 9 geschrieben. Die Arbeitsdatei 9
wird vor ihrer Verwendung gelöscht. Wenn in der Arbeitsdatei 9 eine Datei
geöffnet ist, wird die Meldung EDT5189 ausgegeben und die Anweisung
nicht ausgeführt.

procnr3

Arbeitsdatei, in der das detaillierte Vergleichsergebnis abgelegt wird, falls
ein solches erstellt wird (siehe unten). Die Vergabe der Zeilennummern
erfolgt nach dem Verfahren „Einfügen zwischen zwei Zeilen“ (siehe Abschnitt
„Zeilennummernvergabe“).

Die Arbeitsdatei wird vor der Verwendung gelöscht. War eine Datei in dieser
Arbeitsdatei geöffnet, wird diese implizit und ohne zurück zu schreiben
geschlossen (@CLOSE NOWRITE).

procnr4

Die Angabe einer Arbeitsdatei als Hilfsdatei wird nur noch aus Kompatibilitätsgründen
erlaubt. Eine hier spezifizierte Arbeitsdatei wird vom EDT nicht
mehr verwendet.

Die Arbeitsdateien procnr1 und procnr2 müssen voneinander verschieden sein, andernfalls wird die @COMPARE-Anweisung mit der Meldung EDT5499 abgewiesen. Die Arbeitsdatei procnr3 kann mit procnr1 oder procnr2 identisch sein, man bekommt dann aber kein detailliertes Ergebnis (siehe unten).

Sind alle zu vergleichenden Zeilen gleich bzw. ungleich, wird nur die Meldung EDT0291 bzw. EDT0290 ausgegeben. Ein detailliertes Vergleichsergebnis wird in diesem Fall nicht ausgegeben.

Muss ein detailliertes Ergebnis nach procnr3 ausgegeben werden, wird nach Ende des Vergleichs die Meldung EDT0297 ausgegeben. Ist in diesem Fall eine der beiden Vergleichsdateien die Arbeitsdatei, in der das Ergebnis stehen soll, wird die Meldung EDT5350 ausgegeben, die Ausgabe des detaillierten Vergleichsergebnisses unterbleibt dann.

Ist eine der Vergleichsdateien die Arbeitsdatei 0, darf keine ISAM-Datei durch @OPEN (Format 2) real geöffnet sein, andernfalls wird die @COMPARE-Anweisung mit der Meldung EDT4935 abgewiesen.

Um in EDT-Prozeduren das Vergleichsergebnis abfragen zu können, wird zusätzlich zu den Meldungen EDT0290 und EDT0297 der EDT-Fehlerschalter gesetzt der mit der @IF-Anweisung abgefragt werden kann (siehe @IF-Anweisung):


EDT-Fehlerschalter

Arbeitsdatei    procnr3

EDT0291

nicht gesetzt

leer

EDT0290

gesetzt

leer

EDT0297

gesetzt

nicht leer

Wenn alle aufgeführten Fälle unterschieden werden sollen, muss vor dem Vergleichen mit @COMPARE sowohl der EDT-Fehlerschalter mit @RESET zurückgesetzt als auch die Arbeitsdatei procnr3 gelöscht werden.

Der EDT codiert vor dem Vergleich jede Zeile intern nach UTF16 um und vergleicht die entstandenen Zeilen als Bytefolge. Die Zeilen sind gleich, wenn sowohl Zeileninhalt wie Zeilenlänge dieser Bytefolge gleich sind. Die Zeilennummern werden beim Datenvergleich nicht berücksichtigt. Wenn beide Arbeitsdateien im gleichen Zeichensatz vorliegen, ist dieses Verfahren äquivalent zu einem byteweisen Vergleich der Originalzeilen.

Die Ausgabe des Vergleichsergebnisses muss ggf. in einen geeigneten Zeichensatz umcodiert werden. Bei Ausgabe nach SYSOUT oder SYSLST ist dies der Zeichensatz, der für SYSOUT bzw. SYSLST eingestellt ist. Bei Ausgabe in eine Arbeitsdatei ist dies der Zeichensatz der verglichenen Arbeitsdateien. Haben diese unterschiedliche Zeichensätze, erfolgt die Ausgabe im Zeichensatz UTFE.

Wird die Anweisung mit [K2] unterbrochen und der EDT-Lauf mit /INFORM-PROGRAM fortgesetzt, so wird die Bearbeitung der Anweisung abgebrochen und die Meldung EDT5501 ausgegeben.

Das Format der Ausgabe ist für die Ausgabe in eine Arbeitsdatei bzw. nach SYSLST oder SYSOUT identisch:

LINE#( 1)          FILENAME: DAT.270104
         LINE#( 0) FILENAME: VERGL.1

Es wird eine Überschriftenzeile ausgegeben, in der die Spalten, die den verglichenen Arbeitsdateien zugeordnet werden, mit LINE#... und der Nummer der jeweiligen Arbeitsdatei (in Klammern) gekennzeichnet sind. Zusätzlich wird, sofern vorhanden, der Name einer geöffneten Datei bzw. eines geöffneten Bibliothekselements oder ein lokaler @FILE-Eintrag ausgegeben.

0007.10  KUNDE-100     SORT
0007.20  KUNDE-200     PERCON
        0007.30  KUNDE-700     FDDRL
0010.00          $KUNDE-900    LMS
        0010.00  $KUNDE-900    LMSCONV

Für Zeilen, die nur in einer Arbeitsdatei vorkommen, werden die Zeilennummern und der Inhalt der Sätze (ggf. um 17 Zeichen gekürzt) ausgegeben. Dabei gibt die Stellung der Zeilennummer in Spalte 1 oder in Spalte 2 unter der Überschrift LINE#... an, in welcher der beiden Arbeitsdateien der Satz steht. Dies gilt sinngemäß auch für Sätze unterschiedlichen Inhalts. Diese kommen mit dem einen Inhalt nur in der ersten Arbeitsdatei vor, mit dem anderen Inhalt nur in der zweiten Arbeitsdatei und stehen dabei für gewöhnlich untereinander.

0008.00=0010.00

0018.00=0020.00

Für Zeilen gleichen Inhalts werden die identifizierten Zeilennummern in der Form
0001.00=0006.00 ausgegeben. Sind mehrere aufeinander folgende Sätze gleich (Bereich gleicher Sätze), wird nur das erste und letzte Zeilennummernpaar des Bereiches angegeben (Näheres siehe Beispiel).

Beispiel

Aus der Arbeitsdatei 2 wird in die Arbeitsdatei 1 gewechselt.

Arbeitsdatei 2 wird mit Arbeisdatei 1 verglichen und das Ergebnis in Arbeitsdatei 3 abgelegt. Anschließend wird in die Arbeitsdatei 3 gewechselt.

Das Vergleichsergebnis der Arbeitsdateien 1 und 2 ist in der Arbeitsdatei 3 abgelegt.