Q - Auswahl, Abfrage
|
Funktion
|
Zwei hier anzugebenden Objekte werden verglichen. Abhängig vom Ergebnis des Vergleichs wird ein Befehl ausgeführt. Dieser Befehl ist ein Operator (In der Regel der J-Operator). Es sind entweder zwei numerische Objekte, zwei alphanumerische Objekte oder zwei Kalenderdaten miteinander vergleichbar. Ein Vergleich zwischen einem numerischen und einem alphanumerischen Objekt kann durch Umwandlung des alphanumerischen Objekts in ein numerisches durchgeführt werden (siehe Beispiele).
|
Syntax
|
Q:Objekt1,Objekt2,[Länge,]Vergleich,Operator#
|
Beschreibung der Argumente
|
-
Objekt1/Objekt2Objekte, die verglichen werden sollen. Die Objekte können numerisch, alphanumerisch oder als Datumsangabe definiert werden:1. Numerische DefinitionIn der numerischen Definition sind Objekte entweder Zahlen, die direkt angegeben werden, bestimmte Stellen des Druckbereichs, externe oder interne Seitennummern, sowie Ergebnisse aus Dateipuffern oder infra-Makros. So kann zumBeispiel die erste Druckzeile einer Seite spezifiziert werden usw.Die allgemeine Syntax für die numerische Definition lautet:!{Zahl│T│F│B│L│P│E│Vnn│S|(...)|[...]}[{+│-}nnn]wobei nnn wieder {Zahl|T|F|B|L|P|E|Vnn|S|(...)|[...]} entspricht und beliebig oft wiederholt werden kann.Ein numerischer Vergleichswert kann ein Dezimalwert mit oder ohne Punkt in einem Wertebereich von 2.225073858507214 E - 308 bis 1.7976931348623158 E + 308 sein.Bei einem numerischen Vergleich müssen beide Vergleichswerte numerisch - also mit Ausrufungszeichen (!) sein.ZahlAngabe einer beliebigen Zahl ohne Vorzeichen.interne Variablen T bis SVariableBedeutungTErste Druckzeile der SeiteFErste Zeile des Fußes einer SeiteBLetzte Druckzeile der SeiteLAktuelle DruckzeilePAktuelle SeitennummerEExterne Seitennummer.Innerhalb der infra-Programme besteht die Möglichkeit, die Seitennummer der ersten Seite eines Ausdrucks so vorzubelegen, dass die erste Seite zum Beispiel nicht die Nummer 1, sondern die Nummer 35 erhält. Wird diese externe Seitennummer benötigt, dann ist hier das E anzugeben.SErste Druckzeile des Textes nach dem Kopfinfra-Makroausdruck (...)In runden Klammern kann ein beliebiger Ausdruck mit infra-Makros angegeben werden. infra-Makros sind in der Anwenderhilfe ANWENDER.CHM beschrieben. So kann zum Beispiel mit "(GV(GV_meinevariable))" der Inhalt der Globalvariablen "GV_meinevariable" bestimmt und deren numerischer Wert in einem Vergleich benutzt werden.Wert aus Dateipuffer [...]In eckigen Klammern kann ein Verweis auf einen Dateipufferinhalt angegeben werden. Die allgemeine Syntax des Verweises ist wie folgt:{Index, {{Fnnn | InnnFnnn} | {Position,Länge}}}Der Verweis enspricht damit der Syntax eines alphanumerischen Dateipuffervergleichs, wie er weiter unten unter "2) Alphanumerische Definition" beschrieben wird.Ein numerischer Vergleich mit einem Dateipufferinhalt könnte also so aussehen:
-
Q:![255,10,7]+5,!100,2,J:>huepf#
-
Q:![6,F30],!0,0,J:>LagerNull#+│- nnnIn einem numerischen Vergleich kann beliebig oft mittels Plus und Minus gerechnet werden. Dabei kann wiederum jeder Operator nnn eines der zuvor beschriebenen Elemente sein. Zum Beispiel verweist die Angabe "!T+5" auf die fünfte Zeile nach der ersten Druckzeile der Seite, "!F-10" auf die 10. Zeile vor der ersten Fußzeile des Bereichs. Mit ![6,F30]+![6,F31] können beispielsweise 2 Dateipufferinhalte addiert werden usw.2. Alphanumerische DefinitionDie allgemeine Syntax für die alphanumerische Definition lautet:{'Zeichenkette'│F:{A│C}Füllzeichen,Wiederholungsfaktor│Index,Position}oder als infra-Makroausdruck:(Makroausdruck)oder als Dateipufferverweis:[{Index,{{Fnnn | InnnFnnn} | {Position,Länge}}}]'Zeichenkette'Angabe einer alphanumerischen Zeichenkette.
-
F:{A│C}Füllzeichen,WiederholungsfaktorAngabe einer alphanumerischen Zeichenkette bestehend aus einem Füllzeichen. Das Füllzeichen kann durch seinen ASCII-Wert beschrieben werden.Dann ist das Format Annn zu verwenden, wobei unter nnn die ASCII-Nummer angegeben wird.Das Füllzeichen kann auch direkt angegeben werden. Dann ist das Format Cz zu verwenden, wobei unter z das Zeichen angegeben wird.Der Wiederholungsfaktor gibt die Länge der Zeichenkette, also den Wiederholungsfaktor des Füllzeichens an.Zum Beispiel bedeutet der Faktor 40 eine Zeichenkette von 40 Füllzeichen.Als Wiederholungsfaktor kann wiederum ein Makroausdruck in runden Klammern oder ein Dateipufferverweis in eckigen Klammern angegeben werden.
-
Index,PositionAlle Daten, die während eines Programmablaufs angezeigt werden, werden in sogenannten Dateipuffern gehalten.Diese Puffer sind eindeutig gekennzeichnet durch den Pufferindex.Soll ein Objekt aus einem Dateipuffer definiert werden, dann ist hier der Index des entsprechenden Dateipuffers und die Position innerhalb des Puffers anzugeben.Eine Liste mit allen Dateien und dem dazugehörigen Index ist im Anhang vorhanden. Die verwendeten Puffer sind je nach Programm unterschiedlich.Üblicherweise werden Puffer für jede im Programm verwendete Datei, ein Puffer mit dem Index 255, der für programmindividuelle Angaben zur Verfügung stehtund ein Puffer mit dem Index 252, der Daten für die erste und die letzte Druckzeile eines Programms enthält, verwendet.Soll ein Datenfeld aus einem Dateipuffer als Objekt definiert werden, dann können nur Daten aus einem Dateipuffer ausgegeben werden,welcher vom Programm versorgt wird. Wird ein anderer Index angegeben, so führt das zu Fehlermeldungen im späteren Programmablauf.Die Angabe der Position kann auf drei verschiedene Arten erfolgen:a) Als ZahlDie Position des gewünschten Felds innerhalb des durch Index gekennzeichneten Dateipuffers. Dafür wird die Position als max. dreistellige Zahl angegeben.b) Über das DataDictionaryWird die Position in dem Format Fnnn angegeben, so wird damit gesagt, dass die Position des Felds aus dem DataDictionary ermittelt wird.Das DataDictionary ist eine Beschreibung des Aufbaus aller von infra:NET verwendeten Daten.Es enthält für jedes Feld eines Datensatzes die Position im Satz, die Länge und das Format (z. B. Datum, numerisch, alphanumerisch usw.).Das DataDictionary wird über den Datei-Index und die Feldnummer angesprochen.Ist der Index bereits unter "Index" angegeben, dann muss nur die Feldnummer als maximal dreistellige Zahl nnn angegeben werden.Ist unter "Index" ein anderer Index angegeben, dann wird die Position wie unter c) beschrieben angegeben.c) Über das DataDictionary bei unterschiedlichem IndexSoll die Position in der Datei über das DataDictionary ermittelt werden, und ist der Datei-Index nicht bereits unter "Index" angegeben,dann muss die Position mit dem Format InnnFmmm angegeben werden. Hinter dem Buchstaben I wird der Index der Datei angegeben.Hinter dem Buchstaben F wird, wie bereits bei b), die maximal 3-stellige Feldnummer angegeben.
-
LängeFalls die Länge der Objekte nicht schon durch die Objekte selber definiert ist, wird sie hier angegeben. Dabei gilt die Länge für beide Objekte. Unterschiedliche Längen für die beiden Objekte sind nicht zulässig.3. DatumsangabeDie allgemeine Syntax für die Angabe eines Datums lautet:${'tt.mm.jj[jj]' | 'jj[jj]mmtt' | (...) | [...]}Die zu vergleichenden Datumsangaben können völlig unterschiedlich formatiert sein, zum Beispiel entweder mit Punkten (tt.mm.jjjj) oder in Pufferdarstellung ohne Punkte (jjjjmmtt),mit 4-stelliger oder 2-stelliger Jahreszahl. Bei direkter Angabe eines Datums muss das Datum in einfache Hochkommata eingeschlossen werden.Es findet ein echter kalendarischer Vergleich statt.Bei einem Datumsvergleich müssen beide Vergleichswerte Datumsangaben - also mit einem Dollarsymbol ($) angegeben sein.
-
VergleichHier ist anzugeben, wie die beiden definierten Objekte miteinander verglichen werden sollen. Vier verschieden Vergleichskennzeichen stehen zur Verfügung,um unterschiedliche Vergleiche durchführen zu können:VergleichBedeutung0Der Vergleich ist wahr, wenn Objekt1 und Objekt2 gleich sind (=).1Der Vergleich ist wahr, wenn Objekt1 kleiner ist als Objekt2 (<).2Der Vergleich ist wahr, wenn Objekt1 größer ist als Objekt2 (>).3Der Vergleich ist wahr, wenn Objekt1 und Objekt2 ungleich sind (<>).
-
OperatorJeder durchführbare Vergleich liefert entweder das Ergebnis "wahr" oder das Ergebnis "falsch".Hier kann ein Operator angegeben werden, der ausgeführt wird, wenn der Vergleich den Wert "wahr" ergeben hat.Alle Operatoren für Drucksteuertabellen sind zulässig, mit Ausnahme der Operatoren "C = Kommentar", "H = Tabelle aus einer Datei laden", "l = Sprungmarke definieren" und "Q = Auswahl, Abfrage".Dabei wird die Syntax verwendet, die für die einzelnen Operatoren beschrieben wurde.Das abschließende Gatter ist nicht anzugeben. Innerhalb des Bearbeitungsfensters für den Operator "Q = Auswahl, Abfrage" kann nach Eingabe des Operator-Buchstabensdurch die Funktionstaste F2 ein weiteres Bearbeitungsfenster geöffnet werden. Dieses entspricht dann dem jeweiligen Bearbeitungsfensters des gewählten Operators.Im Bearbeitungsfenster wird nur die klassische Syntax des Q-Operators unterstützt. Vergleiche mit infra-Makros, numerischen Pufferinhalten oder Datumsangaben, sowie beliebige Verkettung von Additionen und Subtraktionen wird hier nicht unterstützt.
Beispiele:
Q:255,7,'1',3,J:6#
Wenn in dem Dateipuffer mit dem Index 255 an Stelle 7 keine 1 steht, dann springe 6 Felder weiter.
|
255
|
Das erste Vergleichsobjekt steht in dem Dateipuffer mit dem Index 255. Das ist der Puffer für programmindividuelle Angaben.
|
|
7
|
Das erste Vergleichsobjekt steht in diesem Dateipuffer an der Position 7.
|
|
3
|
Der Vergleich ist wahr, wenn diese beiden Objekte nicht identisch sind.
|
|
J:6
|
Wenn der Vergleich wahr ist, dann sollen die folgenden 5 Operatoren übersprungen werden (Operator J Sprung). Ist der Vergleich falsch, dann wird beim nächsten Operator fortgefahren.
|
Q:!L+7,!F,2,M:F#
Wenn im Textbereich weniger als 7 Zeilen frei sind, dann führe einen Seitenvorschub aus.
|
!L+7
|
Das erste Vergleichsobjekt ist eine Zeilennummer, nämlich die aktuelle Druckzeile + 7.
|
|
IF
|
Das zweite Vergleichsobjekt ist die erste Fußzeile einer Seite.
|
|
2
|
Der Vergleich ist wahr, wenn das erste Vergleichsobjekt größer ist, als das zweite
Vergleichsobjekt. In diesem Fall heißt das, dass der Vergleich wahr ist, wenn der Fuß der Seite in weniger als 7 Zeilen beginnt.
|
|
M:F
|
Wenn der Vergleich wahr ist, dann soll ein Zeilenvorschub auf die Fußzeile erfolgen (Operator M Zeilenvorschub).
|
Q:53,F87,'1',0,S:57,J#
Wenn in dem Dateipuffer mit dem Index 53 in Feld 87 eine 1 steht, dann gib an Stelle 57 der Liste ein J aus.
|
53
|
Das erste Vergleichsobjekt steht in dem Dateipuffer mit dem Index 53. Das ist der Dateipuffer für die Fertigungsauftragsositionen.
|
|
F87
|
Das erste Vergleichsobjekt hat in diesem Dateipuffer die Position, die im DataDictionary für dieselbe Datei und Feld 87 angegeben wird. Das ist das Meilensteinkennzeichen.
|
|
'1'
|
Das zweite Vergleichsobjekt ist das Zeichen 1.
|
|
0
|
Der Vergleich ist wahr, wenn diese beiden Objekte identisch sind. Das bedeutet, dass der Vergleich wahr ist, wenn das Meilensteinkennzeichen auf 1 gesetzt ist.
|
|
S:57,J
|
Wenn der Vergleich wahr ist, wird in an Stelle 57 das Zeichen J ausgegeben.
|
Q:255,1,'1',0,A:FST593,40#
Wenn in dem Dateipuffer mit dem Index 255 an der Stelle 1 eine 1 steht, dann lade die Drucksteuertabelle mit dem Tabellennamen FST593 und der Tabellennummer 40 für den Abschlussbereich.
|
255
|
Das erste Vergleichsobjekt steht in dem Dateipuffer mit dem Index 255. Das ist der Dateipuffer für programmindividuelle Angaben.
|
|
1
|
Das erste Vergleichsobjekt steht in dem angegebenen Puffer an der Stelle 1.
|
|
'1'
|
Das zweite Vergleichsobjekt ist das Zeichen 1.
|
|
0
|
Der Vergleich ist wahr, wenn diese beiden Objekte identisch sind. Das bedeutet, dass der Vergleich wahr ist, wenn das beschriebene erste Vergleichsobjekt eine 1 ist.
|
|
A:FST593,40
|
Wenn der Vergleich wahr ist, dann wird aus der Datei FST593.MIL die Drucksteuertabelle mit der Nummer 40 für die Abschlusstabelle geladen.
|
Q:255,750,F:C ,40,3,M:1#
Wenn in dem Dateipuffer mit dem Index 255 an der Stelle 750 keine Zeichenkette von 40 Leerzeichen steht, dann führe einen Zeilenvorschub aus.
|
255
|
Das erste Vergleichsobjekt steht in dem Dateipuffer mit dem Index 255. Das ist der Dateipuffer für programmindividuelle Angaben.
|
|
750
|
Das erste Vergleichsobjekt steht in dem angegebenen Puffer an der Stelle 750.
|
|
F:C
|
Das zweite Vergleichsobjekt ist ein Füllzeichen (F:). Es ist alphanumerisch (C). Hinter dem C ist als Füllzeichen ein Leerzeichen angegeben.
|
|
40
|
Der Wiederholungsfaktor für das Leerzeichen ist 40. Das zweite Vergleichsobjekt besteht also aus einer Zeichenkette von 40 Leerzeichen.
|
|
3
|
Der Vergleich ist wahr, wenn diese beiden Objekte nicht identisch sind. In diesem Fall ist der Vergleich also wahr, wenn das beschriebene erste Vergleichsobjekt keine Zeichenkette von 40 Leerzeichen ist.
|
|
M:1
|
Wenn der Vergleich wahr ist, dann erfolgt ein Zeilenvorschub um eine Zeile.
|
Q:(Trim(GV(GV_loginname))),’meister’,3,J:>dunicht#
Wenn der aktuell angemeldete Benutzer (Inhalt der Globalvariablen "GV_loginname") nicht der Benutzer ‚meister’ ist, dann springe an die Marke "dunicht".
|
(…)
|
Das erste Vergleichsobjekt steht in Klammern. Das bedeutet, dass der in Klammern stehende Ausdruck aus infra-Makros zusammengesetzt ist (siehe Kapitel 15.01infra-Makros in den Systeminformationen). In diesem Beispiel wird zunächst mit GV(GV_loginname) der Benutzername aus den infra-Globalvariablen gelesen. Anschließend werden mit Trim(...) überflüssige Leerzeichen entfernt. Als Ergebnis bleibt der "nackte" Benutzername übrig.
|
|
‚...’
|
Beim zweiten Vergleichsobjekt handelt es sich um eine feste Zeichenkette - in diesem Fall der Text "meister".
|
|
3
|
Der Vergleich ist wahr, wenn die beiden Vergleichsobjekte nicht identisch - also der angemeldete Benutzer ungleich "meister" ist.
|
|
J:>...
|
Wenn der Vergleich wahr ist, wird an die Marke "dunicht" gesprungen.
|
Q:6,F3,[27,F1],0,J:>isgleich#
Wenn der Inhalt des Felds 3 (Teilenummer) im Dateipuffer mit dem Index 6 (hier Teilestamm) mit dem Inhalt des Felds 1 (Teilenummer) im Dateipuffer mit dem Index 27 (hier MWI-Teilestamm) identisch ist, dann springe an die Marke "istgleich".
|
6
|
Das erste Vergleichsobjekt steht im Dateipuffer mit dem Index 6. Das ist der Dateipuffer für den Teilestamm.
|
|
F3
|
Das erste Vergleichsobjekt hat in diesem Dateipuffer die Position, die im DataDictionary für dieselbe Datei und Feld 3 angegeben wird. Das ist die Teilenummer.
|
|
[...]
|
Das zweite Vergleichsobjekt steht in eckigen Klammern. Das bedeutet, dass in den Klammern ein Verweis auf ein Datenobjekt aus einem Dateipuffer angegeben wird.
|
|
27
|
Das zweite Vergleichsobjekt steht im Dateipuffer mit dem Index 27. Das ist der Dateipuffer für den MWI-Teilestamm.
|
|
F1
|
Das zweite Vergleichsobjekt hat in diesem Dateipuffer die Position, die im DataDictionary für dieselbe Datei und Feld 1 angegeben wird. Das ist die Teilenummer.
|
|
0
|
Der Vergleich ist wahr, wenn die beiden Vergleichsobjekte identisch sind - also der Inhalt von Feld 3 im Teilestamm mit dem Inhalt von Feld 1 im MWI-Teilestamm übereinstimmt.
|
|
J:>...
|
Wenn der Vergleich wahr ist, wird an die Marke "isgleich" gesprungen.
|
Q:![255,10,7]+5,!100,2,J:>huepf#
Wenn der numerische Wert aus dem Dateipuffer mit dem Index 255, an der Position 10 und mit der Länge 7 nach einer Addition mit 5 größer als der numerische Wert 100 ist, dann springe an die Marke "huepf".
|
!
|
Das erste Vergleichsobjekt ist ein numerischer Wert. Numerische Werte können dezimal - mit oder ohne Punkt sein. Achtung! Wenn das erste Vergleichsobjekt numerisch ist, muss auch das zweite Objekt numerisch sein, also ebenfalls mit einem Ausrufungszeichen beginnen.
|
|
[...]
|
Das erste numerische Vergleichsobjekt steht in eckigen Klammern. Das bedeutet, dass in den Klammern ein Verweis auf ein Datenobjekt aus einem Dateipuffer angegeben wird.
|
|
255
|
Das erste Vergleichsobjekt steht im Dateipuffer mit dem Index 255. Das ist der Dateipuffer für programmindividuelle Angaben.
|
|
10
|
Das erste Vergleichsobjekt steht im angegebenen Puffer an der Position 10.
|
|
7
|
Das erste Vergleichsobjekt ist 7 Zeichen lang.
|
|
+5
|
Zum Wert des ersten Vergleichsobjekts wird der Wert 5 addiert.
|
|
!100
|
Das zweite Vergleichsobjekt ist ein fester numerischer Wert von 100.
|
|
2
|
Der Vergleich ist wahr, wenn das erste Vergleichsobjekt größer ist, als das zweite Vergleichsobjekt. Da hier beide Objekte numerisch sind, findet ein numerischer Wertevergleich statt.
|
|
J:>...
|
Wenn der Vergleich wahr ist, wird an die Marke "isgleich" gesprungen.
|
Q:![255,10,7]+(GV(GV_meinevariable))+1,!100,2,J:>huepf#
Wenn der numerische Wert aus dem Dateipuffer mit dem Index 255, an der Position 10 und mit der Länge 7 nach einer Addition mit dem Inhalt der Globalvariablen GV_meinevariable und einer weiteren Addition mit 1 größer als der numerische Wert 100 ist, dann springe auf die Marke "huepf". Es können beliebig viele Additionen und Subtraktionen bei einem numerischen Vergleich durchgeführt werden.
Q:![255,10,7]-1.5,!2000000,1,J:>huepf#
Wenn der numerische Wert aus dem Dateipuffer mit dem Index 255, an der Position 10 und mit der Länge 7 nach einer Subtraktion des numerischen Werts 1.5 kleiner als der numerische Wert 2000000 ist, dann springe an die Marke "huepf". Die Höchstgrenze für numerische Vergleichswerte liegt bei 1.7976931348623158 E308 (das ist recht viel).
Q:$’1.1.2001’,$(GV(GV_datum)),0,S:1,Prost Neujahr!#
Wenn das Datum 1.Januar 2001 mit dem Datum aus der Globalvariable GV_datum übereinstimmt, dann drucke den Text "Prost Neujahr!".
|
$...
|
Das erste Vergleichsobjekt ist eine Datumsangabe. Datumsangaben können in einem beliebigen Datumsformat, entweder mit Punkten (tt.mm.jjjj) oder in Pufferdarstellung ohne Punkte (jjjjmmtt), mit 4-stelliger oder 2-stelliger Jahreszahl gemacht werden. Bei direkter Angabe eines Datums muss das Datum in einfache Hochkommata eingeschlossen werden.
Achtung!
Wenn das erste Vergleichsobjekt eine Datumsangabe (mit $ Zeichen) ist, dann muss das zweite Vergleichsobjekt ebenfalls eine Datumsangabe sein. $’1.1.20001’ Das erste Vergleichsobjekt ist das Datum 1.Januar 2001
|
|
$...
|
Das zweite Vergleichsobjekt ist ebenfalls eine Datumsangabe. Das Format dieser Datumsangabe muss nicht dem Format der ersten Datumsangabe entsprechen.
|
|
(…)
|
Die zweite Datumsangabe steht in Klammern. Das bedeutet, das diese Datumsangabe aus infra-Makros ermittelt wird (siehe Kapitel 15.01 infra-Makros in der Systeminformation).
|
|
GV
(GV_datum)
|
Die zweite Datumsangabe ist der Inhalt der Globalvariablen GV_datum. In dieser Variablen wird das infra-Arbeitsdatum gespeichert.
|
|
0
|
Der Vergleich ist wahr, wenn die beiden Vergleichsobjekte identisch sind - also der Inhalt der Globalvariablen GV_datum dem Datum 1.Januar 2001 entspricht.
|
|
S:…
|
Wenn der Vergleich wahr ist, wird der Text "Post Neujahr!" an der Druckposition 1 der aktuellen Druckzeile ausgegeben.
|
