Dieses Format der @IF-Anweisung kann in EDT-Prozeduren benutzt werden, um Zeichenfolgen, Zeilennummern oder Ganzzahlen miteinander zu vergleichen. Die Operanden dürfen dabei sowohl explizit (als Literale) als auch über eine Referenz (Zeilennummer bzw. EDT-Variable) angegeben werden.
Trifft die Vergleichsbedingung zu, wird die angegebene Zeichenfolge als Eingabe abgearbeitet. Ist die Bedingung nicht erfüllt, bleibt die Anweisung wirkungslos.
| Operation | Operanden | L-Modus | 
| @IF | { [S] string1 rel string2  | |
| S | Das Schlüsselwort  Beispielsweise werden mit @IF #L1=#L2 die Zeilennummern in  | ||||||||||||||
| string1, string2 | Die miteinander zu vergleichenden Zeichenfolgen. | ||||||||||||||
| line1, line2 | Die miteinander zu vergleichenden Zeilennummern. Es werden nicht die  | ||||||||||||||
| I | Das Schlüsselwort  | ||||||||||||||
| int1, int2 | Die miteinander zu vergleichende Ganzzahlen. Es kann jeweils eine ganze (positive oder negative) Zahl oder eine  | ||||||||||||||
| rel | Legt die Vergleichsrelation fest: 
 | ||||||||||||||
| text | EDT-Anweisung oder Datenzeile. Falls die Bedingung erfüllt ist, wird die  Der Operand  Wird  | 
Aus Kompatibilitätsgründen wird die früher mögliche Angabe von GOTO oder RETURN ohne Doppelpunkt in Prozeduren weiter unterstützt.
Der Vergleich zweier Zeichenfolgen hängt zum einen vom Zeichensatz ab, in dem die Zeichenfolgen codiert sind, zum anderen von der Länge der Zeichenfolgen (Zeichenfolgen der Länge Null sind zugelassen).
Den beiden Operanden string1 und string2 kann in jedem Fall ein Zeichensatz entsprechend ihrer Herkunft zugeordnet werden. Wenn die beiden so bestimmten Zeichensätze gleich sind, findet der Vergleich in diesem gemeinsamen Zeichensatz binär statt. 
Sind die beiden Zeichensätze verschieden, aber beides EBCDIC 7/8-Bit-Zeichsätze, erfolgt der Vergleich wie bisher binär. 
Andernfalls werden beide Zeichenketten intern nach UTF16 konvertiert und der Vergleich findet in UTF16 statt.
Nach der ggf. notwendigen Umcodierung werden von links nach rechts die sich entsprechenden Zeichen der beiden Zeichenfolgen miteinander verglichen. Auf diese Weise erreicht man entweder ein ungleiches Zeichenpaar, oder aber das Ende einer oder beider Zeichenfolgen. Für den Fall der Ungleichheit an einer Stelle steht die Ungleichheit der beiden Zeichenfolgen fest. Der EDT interpretiert die beiden ungleichen Zeichen gemäß ihrem
Zeichensatz als Dualzahlen. Größer ist die Zeichenfolge, deren Zeichen die größere Dualzahl darstellt. Wurde kein ungleiches Zeichenpaar gefunden, wird die längere der beiden Zeichenfolgen als die größere betrachtet. Sind beide Zeichenfolgen gleich lang und wurde kein ungleiches Zeichenpaar gefunden, sind die Zeichenfolgen gleich. Sind die beiden Zeichenfolgen unterschiedlich lang, kann also niemals Gleichheit der beiden Zeichenfolgen vorliegen.
Hinweis
Beim Vergleich von Zeilennummern bezeichnen sowohl %+3L als auch %+3 gültige Zeilennummern. Bei einer nachfolgenden Vergleichsrelation LE kann das zu Interpretationsschwierigkeiten führen. Deshalb ist es generell empfehlenswert, die mathematischen Zeichen für die Vergleichsrelationen zu benutzen.
Auch wenn man Spaltenangaben beim Operanden string2 verwendet, kann es zu Interpretationsschwierigkeiten mit dem Einleiter des Operanden text kommen. Es ist bei der Notation in diesen Fällen besondere Sorgfalt auf eine eindeutige Interpretierbarkeit zu legen. Insbesondere ist es Pflicht, die Spaltenangabe mit Doppelpunkt abzuschließen (sonst optional).
Aus Kompatibilitätsgründen wird das von XHCS festgelegte Sortiergewicht beim Vergleich der Zeichen nicht berücksichtigt. Dies gilt auch für Unicode-Zeichensätze. Eine Sortierung, beispielsweise mit dem Programm SORT, kann also eine andere Reihenfolge liefern als es das Ergebnis einer @IF-Abfrage im EDT nahe legen würde.
Die Verwendung von @IF mit @RETURN als Anweisung außerhalb von Prozeduren führt möglicherweise zur Beendigung des EDT (siehe @RETURN-Anweisung).
Beispiel 1
4. @PRINT 1.0000 BITTE NICHT LACHEN 2.0000 WEGEN DIESES BEISPIELS 3.0000 BITTE NICHT LACHEN 4. @SET #S0 = 'ERSTE ZEILE = LETZTE ZEILE' 4. @SET #S1 = 'ERSTE ZEILE UNGLEICH LETZTE ZEILE' --------------- (1) 4. @SET #I9 = 2 4. @PROC 3 1. @ @IF S %+#I9 = $-2L : @GOTO 4 ------------------------------- (2) 2. @ @PRINT #S1 N 3. @ @RETURN 4. @ @PRINT #S0 N 5. @END 4. @DO 3 -------------------------------------------------------- (3) ERSTE ZEILE = LETZTE ZEILE 4. @ON 1 DELETE 'NICHT' 4. @DO 3 -------------------------------------------------------- (4) ERSTE ZEILE UNGLEICH LETZTE ZEILE 4.
| (1) | Die Zeichenfolgevariablen #S0und#S1und die Ganzzahlvariable#I9 werden mit Inhalt versehen. | 
| (2) | Bei Ausführung der Arbeitsdatei 3 werden an dieser Stelle nicht Zeilennummern, sondern Zeileninhalte miteinander verglichen. | 
| (3) | Die Ausführung der in Arbeitsdatei 3 abgelegten Anweisungen führt zum Vergleich der Zeilen 3 ( %+#I9) und 1 ($-2Lalso3-2). Da die Inhalte dieser beiden Zeilen identisch sind, wird zu der Zeile 4 der Arbeitsdatei 3 verzweigt. | 
| (4) | Da sich inzwischen der Inhalt von Zeile 1 geändert hat, wird nicht zu der Zeile 4 der Arbeitsdatei 3 verzweigt. | 
Beispiel 2
1. @SET #S4 = 'M' ------------------------------------------------ (1) 1. @PROC 4 1. @ @PRINT #S4 N ------------------------------------------------ (2) 2. @ @CREATE #S4: 'M',#S4 3. @ @IF #S4 < 'M'*8 : @GOTO 1 4. @END 1. @DO 4 M MM MMM MMMM MMMMM MMMMMM MMMMMMM 1.
| (1) | Die Zeichenfolgevariable  #S4erhält das ZeichenMals Inhalt. | 
| (2) | In Arbeitsdatei 4 wird folgende Prozedur eingegeben: Der Inhalt von #S4soll ausgegeben werden. Danach soll vor den momentanen Inhalt von#S4der BuchstabeMgestellt werden. | 
Für den Fall, dass der Inhalt von #S4 kleiner als MMMMMMMM ist, soll wieder von vorne begonnen werden.
Beispiel 3
9. @PRINT 1.0000 ABC 2.0000 WER 3.0000 ABC 4.0000 WILL 5.0000 ABC 6.0000 HIER 7.0000 ABC 8.0000 MITMACHEN? 9. @PROC 6 1. @ @IF ! <> 'ABC' : @GOTO 3 ------------------------------------ (1) 2. @ @CREATE !: '*' * 20 3. @ @CONTINUE 4. @END 9. @DO 6,!=%,$ --------------------------------------------------- (2) 9. @PRINT 1.0000 ******************** 2.0000 WER 3.0000 ******************** 4.0000 WILL 5.0000 ******************** 6.0000 HIER 7.0000 ******************** 8.0000 MITMACHEN? 9.
| (1) | In der Arbeitsdatei 6 werden die Zeilennummern über den Schleifenzähler ! angesprochen. Sollte der Inhalt der gerade über den Zähler ! angesprochenen Zeile vonABCverschieden sein, soll sich an diesem Zeileninhalt nichts ändern. Im anderen Fall soll der Zeileninhalt durch******************** ersetzt werden. | 
| (2) | Arbeitsdatei 6 wird ausgeführt. Hierbei sollen alle Zeilen der aktuellen Arbeitsdatei nacheinander durch den Schleifenzähler !angesprochen werden. | 
Beispiel 4
4. @PRINT 1.0000 BITTE NICHT LACHEN 2.0000 WEGEN DIESES BEISPIELS 3.0000 ES IST ZU EINFACH 4. @SET #S0 = 'VERGLEICH POSITIV' 4. @SET #S1 = 'VERGLEICH NEGATIV' -------------------------------- (1) 4. @SET #I9 = 1 4. @PROC 1 ------------------------------------------------------- (2) 1. @ @IF %+#I9 = $-1L : @GOTO 4 ---------------------------------- (3) 2. @ @PRINT #S1 N 3. @ @RETURN 4. @ @PRINT #S0 N 5. @END 4. @DO 1 --------------------------------------------------------- (4) VERGLEICH POSITIV 4. @SET #I9 = 2 4. @DO 1 --------------------------------------------------------- (5) VERGLEICH NEGATIV 4.
| (1) | Die Zeichenfolgevariablen #S0und#S1werden mit Inhalt versehen. Der Ganzzahlvariablen#I9wird der Wert 1 zugewiesen. | 
| (2) | Arbeitsdatei 1 wird geöffnet. | 
| (3) | Bei einem später gegebenen @DO 1 bewirkt diese Zeile, dass die Zeilennummern  Mit  Mit  Mit  | 
| (4) | Die Prozedur in Arbeitsdatei 1 wird ausgeführt. Zu diesem Zeitpunkt ist die dort genannte Relation  %+#I9=$–1Lwahr, da1+1=3–1wahr ist. | 
| (5) | Zu diesem Zeitpunkt ist die in der Arbeitsdatei 1 genannte Relation %+#I9=$-1Lfalsch, da1+2=3–1falsch ist. | 
Beispiel 5
4. @PRINT 1.0000 BITTE NICHT LACHEN 2.0000 WEGEN DIESES BEISPIELS 3.0000 ES IST ZU EINFACH 4. @SET #L3 = 5 4. @PROC 2 1. @ @IF %+6-#L3 <> $-* : @RETURN -------------------------------- (1) 2. @ @CREATE $+1: 'ODER AUCH NICHT' 3. @ @PRINT 4. @END 4. @$-1 2. @DO 2 --------------------------------------------------------- (2) 2. @1 1. @DO 2 --------------------------------------------------------- (3) 1.0000 BITTE NICHT LACHEN 2.0000 WEGEN DIESES BEISPIELS 3.0000 ES IST ZU EINFACH 4.0000 ODER AUCH NICHT 1.
| (1) | Ist bei Ausführung der Arbeitsdatei 2 die hier genannte Relation nicht erfüllt ( <>steht für ungleich), wird der Prozedurablauf an dieser Stelle abgebrochen. | 
| (2) | Die Arbeitsdatei 2 wird ausgeführt. Wegen *=$–1=2ist die Aussage%+6–#L3<>$–* gleichwertig mit1+6–5<>3–2und damit wahr. Deshalb wird die Ausführung der Arbeitsdatei abgebrochen. | 
| (3) | Zu diesem Zeitpunkt gilt *=1und somit ist die in Arbeitsdatei 2 stehende Relation%+6–#L3<>$–*falsch, da1+6–5=3–1. Deshalb werden auch die restlichen Anweisungen der Arbeitsdatei 2 ausgeführt. | 
Beispiel 6
1. @SET #I3 = 1 -------------------------------------------------- (1) 1. @PROC 7 1. @ @IF #I3 > 5 : @RETURN 2. @ @STATUS = #I3 ----------------------------------------------- (2) 3. @ @SET #I3 = #I3+1 4. @ @GOTO 1 5. @END 1. @DO 7 --------------------------------------------------------- (3) #I03= 0000000001 #I03= 0000000002 #I03= 0000000003 #I03= 0000000004 #I03= 0000000005 1.
| (1) | Der Ganzzahlvariablen #I3wird der Wert 1 zugewiesen. | 
| (2) | Mit der Prozedur in Arbeitsdatei 7 sollen die Werte für die Ganzzahlvariable #I3 solange ausgegeben (@STATUS =#I3) und erhöht werden (#I3+1), bis zum 1. Mal#I3 einen Wert größer als 5 angenommen hat. | 
| (3) | Die Arbeitsdatei 7 wird ausgeführt. |