Mit diesem Format der @INPUT-Anweisung wird eine @INPUT-Prozedur aus einer SAM- oder ISAM-Datei gestartet. Format 2 wird nur noch aus Kompatibilitätsgründen unterstützt und sollte nicht mehr verwendet werden. Die Anweisungen bzw. Datensätze aus der Datei werden sequentiell abgearbeitet. Einzelheiten zum Aufbau und zur Bearbeitung von EDT-Prozeduren findet man im Abschnitt „EDT-Prozeduren“.
Operation | Operanden | F-Modus, L-Modus |
@INPUT | file [(ver)] [lines[,...]] [:cols[,...]:] [{RECORDS | KEY}] [PRINT] |
file | Name der SAM- oder ISAM-Datei, die eingelesen und abgearbeitet werden Die symbolische Bezeichnung Existiert die angegebene Datei nicht oder ist sie nicht wie erforderlich |
ver | Dieser Operand darf zwar aus Symmetriegründen angegeben werden, wird |
lines | Einer oder mehrere Zeilenbereiche, die in der ISAM- oder SAM-Datei Werden symbolische Zeilennummern angegeben, werden deren Werte aus |
cols | Einer oder mehrere Spaltenbereiche, die die abzuarbeitenden Anweisungen |
KEY | Legt fest, dass die ersten 8 Zeichen einer jeden Zeile einer SAM-Datei als |
RECORDS | Legt fest, dass bei SAM-Dateien ein Zeilenbereich (siehe Operanden |
Jede Zeile der Prozedur soll vor ihrer Verarbeitung protokolliert werden. Die Durch die Angabe von |
Die Anweisung @INPUT (Format 2) darf weder in @INPUT- noch in @DO-Prozeduren abgesetzt werden.
Die Schlüsselwörter KEY
und RECORDS
werden für ISAM-Dateien ignoriert. Wenn weder RECORDS
noch KEY
angegeben wird, wird eine Angabe des Operanden lines
für SAM-Dateien ignoriert, d.h. es werden alle Zeilen der Datei abgearbeitet.
Die Abarbeitung einer @INPUT-Prozedur wird abgebrochen, wenn die Anweisung @RETURN oder die letzte Anweisung der Prozedur abgearbeitet wurde.
Für ISAM-Dateien und SAM-Dateien (mit Operanden KEY
) sollte der Satzschlüssel immer eine gültige Zeilennummer enthalten und bei SAM-Dateien erwartet der EDT eine aufsteigende Ordnung der Sätze.
Wird die Datei ohne Angabe eines Zeilenbereiches gelesen, werden die Satzschlüssel einfach ignoriert, also auch nicht überprüft. Werden dagegen Zeilenbereiche angegeben so ist das Verhalten für SAM-Dateien und ISAM-Dateien unterschiedlich.
Bei ISAM-Dateien werden die Schlüssel der tatsächlich gelesenen Sätze überprüft. Enthält ein Satz einen nichtnumerischen Schlüssel, wird die Abarbeitung der Prozedur mit dem Fehler EDT4984
abgebrochen.
Bei SAM-Dateien werden Sätze mit nichtnumerischen Schlüsseln oder mit Schlüsselwerten die kleiner als die aktuelle untere Bereichsgrenze sind ignoriert. Ist der Schlüsselwert größer als die aktuelle obere Bereichsgrenze, werden dieser und alle nachfolgenden Sätze ignoriert. Außerdem werden bei SAM Sätze die kürzer als 8 Zeichen sind ebenfalls ignoriert.
Enthält die @INPUT-Prozedur Datensätze, werden diese wie bei der Dateneingabe im L-Modus in die aktuelle Arbeitsdatei eingefügt (leere Sätze werden ignoriert). Ist die aktuelle Arbeitsdatei leer und hat den Zeichensatz *NONE
, erhält die Arbeitsdatei den Zeichensatz der Datei, falls Datensätze eingefügt werden. Ist der Zeichensatz der Datei *NONE
, erhält die Arbeitsdatei beim Einfügen von Sätzen den Zeichensatz EDF03IRV
.
Die aus der @INPUT-Prozedur gelesenen Anweisungen oder Datensätze werden in dem Zeichensatz der angegebenen Datei interpretiert. Ist dieser *NONE
, wird EDF03IRV
benutzt.
Dieser Zeichensatz kann sich von dem Zeichensatz der aktuellen Arbeitsdatei unterscheiden. Da die Anweisungen stets auf die aktuelle Arbeitsdatei wirken bzw. die Datensätze in die aktuelle Arbeitsdatei eingefügt werden, kann es daher notwendig sein, Literale in Anweisungen bzw. Datensätze umzucodieren.
Enthält die Datei Zeichen, die im Zeichensatz der Arbeitsdatei nicht darstellbar sind, werden diese durch ein Ersatzzeichen ersetzt, sofern ein solches spezifiziert ist (siehe @PAR SUBSTITUTION-CHARACTER), andernfalls wird die Abarbeitung der @INPUT-Prozedur mit der Fehlermeldung EDT5453
abgebrochen. Dies gilt auch, falls sich das ungültige Zeichen außerhalb des einzulesenden Spaltenbereichs befindet. Ungültige Zeichen außerhalb des einzulesenden Zeilenbereichs werden hingegen ignoriert.
Liegt die Datei in einem Unicode-Zeichensatz vor und enthält sie ungültige Bytefolgen, z.B. Surrogate-Zeichen, kann sie auch bei Angabe eines SUBSTITUTION-CHARACTERS
nicht eingelesen werden. In diesem Fall wird die Abarbeitung der @INPUT-Prozedur mit der Meldung EDT5454
abgebrochen.
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.
Beispiel
6. @PRINT 1.0000 @DELETE 2.0000 ICH BIN ZEILE 1 3.0000 ICH BIN DIE ZWEITE ZEILE 4.0000 @PRINT 1 5.0000 @PRINT 2 6. @WRITE 'SAM-INP' KEY --------------------------------------------- (1) 6. @SAVE 'ISAM-INP' ------------------------------------------------- (2) 6. @INPUT 'SAM-INP' KEY --------------------------------------------- (3) 1.0000 ICH BIN ZEILE 1 2.0000 ICH BIN DIE ZWEITE ZEILE 3. @INPUT 'ISAM-INP' 1-3,5,4 ---------------------------------------- (4) 2.0000 ICH BIN DIE ZWEITE ZEILE 1.0000 ICH BIN ZEILE 1 3.
(1) Der Inhalt der Arbeitsdatei wird als SAM-Datei geschrieben, wobei vor jede Zeile ein Schlüssel zu legen ist, der aus der jeweiligen Zeilennummer errechnet wird.
(2) Der Inhalt der Arbeitsdatei wird noch einmal geschrieben, diesmal aber als ISAM-Datei.
(3) Die komplette Datei SAM-INP
wird eingelesen und ausgeführt. Da diese Datei mit @WRITE unter Benutzung von KEY
erstellt wurde, ist KEY
anzugeben. Anderenfalls erfolgt keine Umrechnung der gespeicherten Schlüssel in die Zeilennummern.
(4) Die Zeilen 1-3
,5
,4
der Datei ISAM-INP
sollen in dieser Reihenfolge eingelesen und ausgeführt werden.