IBM Buch

Verwaltung und Programmierung für OS/400

Bedingte Logik: IF-Blöcke

Mit Hilfe des IF-Blocks können Sie in einem Net.Data-Makro eine bedingte Verarbeitung durchführen. Der IF-Block ist den IF-Anweisungen der meisten höheren Programmiersprachen ähnlich, weil er die Möglichkeit bietet, eine oder mehrere Bedingungen zu testen und anschließend auf der Grundlage des Ergebnisses des Bedingungstests einen Block von Anweisungen auszuführen.

Sie können IF-Blöcke fast überall in einem Makro verwenden und verschachteln. Die Syntax eines IF-Blocks wird im Kapitel über die Sprachkonstrukte im Handbuch Net.Data Reference dargestellt.

Regeln für IF-Block: Die Syntaxregeln für einen IF-Block werden durch die Position des Blocks im Makro bestimmt. Die Elemente, die im Block der ausführbaren Anweisungen eines IF-Blocks zulässig sind, hängen von der Position des IF-Blocks selbst ab.

Zeichenfolgevergleiche für IF-Blöcke

Net.Data verarbeitet die Bedingungsliste des IF-Blocks auf eine von zwei Arten, je nach dem Inhalt der Ausdrücke, aus denen die Bedingungen bestehen. Die Standardaktion besteht darin, alle Ausdrücke als Zeichenfolgen zu behandeln und Zeichenfolgevergleiche wie in den Bedingungen angegeben durchzuführen. Wenn jedoch zwei Zeichenfolgen, die ganze Zahlen darstellen, verglichen werden, ist der Vergleich numerisch. Net.Data geht davon aus, daß eine Zeichenfolge numerisch ist, wenn sie nur Ziffern enthält, denen wahlfrei ein Zeichen '+' oder '-' vorangestellt sein kann. Die Zeichenfolge darf keine Nichtziffernzeichen außer '+' bzw. '-' enthalten. Net.Data unterstützt keinen numerischen Vergleich von nicht ganzzahligen Zahlen.

Beispiele für gültige Ganzzahlenfolgen:
+1234567890
-47
000812
92000

Beispiele für ungültige Ganzzahlenfolgen:
-  20     (enthält Leerzeichen)
234,000   (enthält ein Komma)
57.987    (enthält einen Punkt)
 

Net.Data wertet die IF-Bedingung zum Zeitpunkt der Ausführung des Blocks aus. Dieser Zeitpunkt muß nicht mit dem Zeitpunkt, zu dem der Block ursprünglich von Net.Data gelesen wurde, übereinstimmen. Wenn Sie zum Beispiel einen IF-Block in einem REPORT-Block angeben, wertet Net.Data die Bedingungsliste des IF-Blocks nicht beim Lesen der FUNCTION-Blockdefinition mit dem REPORT-Block aus, sondern erst beim Aufrufen und Ausführen der Funktion. Dies gilt sowohl für den Abschnitt mit der Bedingungsliste des IF-Blocks als auch für den Block der auszuführenden Anweisungen.

Beispiel für IF-Block: Ein Makro mit IF-Blöcken in anderen Blöcken

%{ This macro is called from another macro, passing the operating system
   and version variables in the form data.
%}
 
%IF (platform == "AS400")
  %IF (version == "V3R2")
     %INCLUDE "as400v3r2_def.hti"
  %ELIF (version == "V3R7")
     %INCLUDE "as400v3r7_def.hti"
  %ELIF (version == "V4R1")
     %INCLUDE "as400v4r1_def.hti"
%ENDIF
%ELSE
     %INCLUDE "default_def.hti"
%ENDIF 
 
%MACRO_FUNCTION numericCompare(IN term1, term2, OUT result) {
%IF (term1 < term2)
  @dtw_assign(result, "-1")
%ELIF (term1 > term2)
  @dtw_assign(result, "1")
%ELSE
  @dtw_assign(result, "0")
%ENDIF
%}
  
%HTML(report){
  %WHILE (a < "10") {
    outer while loop #$(a)<BR>
    %IF (@dtw_rdivrem(a,"2") == "0")
      this is an even number loop<BR>
%ENDIF
    @DTW_ADD(a, "1", a)
  %}
%}


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]