Jeder Datei im Programm können mit der FILE STATUS-Klausel Datenfelder zugeordnet werden, in denen das Laufzeitsystem nach jedem Zugriff auf die Datei Informationen darüber hinterlegt,
ob die Ein-/Ausgabeoperation erfolgreich war und
welcher Art ggf. die dabei aufgetretenen Fehler sind.
Diese Informationen können z.B. in den DECLARATIVES durch USE-Prozeduren ausgewertet werden und gestatten eine Analyse von Ein-/Ausgabefehlern durch das Programm. Als Erweiterung zum COBOL-Standard bietet COBOL2000 die Möglichkeit, in diese Analyse auch die Schlüssel der DVS-Fehlermeldungen einzubeziehen. Dadurch lässt sich eine feinere Differenzierung der Fehlerursachen erreichen.
Die FILE STATUS-Klausel wird im FILE-CONTROL-Paragrafen der ENVIRONMENT DIVISION angegeben; ihr Format ist (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]):
FILE STATUS IS datenname-1 [datenname-2]
Dabei müssen datenname-1 und, falls angegeben, datenname-2 in der WORKING-STORAGE SECTION oder der LINKAGE SECTION definiert sein. Für die Formate und die möglichen Werte dieser beiden Datenfelder gelten folgende Regeln:
datenname-1
muss als zwei Byte langes alphanumerisches Datenfeld erklärt werden, also z.B.
01 datenname-1 PIC X(2).
enthält nach jeder Ein-/Ausgabeoperation auf die zugeordnete Datei einen zweistelligen numerischen Zustandscode, dessen Bedeutung der Tabelle am Ende dieses Abschnitts entnommen werden kann.
datenname-2
muss als sechs Byte langes Gruppenfeld der folgenden Struktur erklärt werden:
01 datenname-2.
02 datenname-2-1 PIC 9(2) COMP.
02 datenname-2-2 PIC X(4).dient der Aufnahme des DVS-Fehlerschlüssels (DVS-Codes) zum jeweiligen Ein-/ Ausgabezustand und enthält nach jedem Zugriff auf die zugeordnete Datei einen Wert, der vom Inhalt des Feldes datenname-1 abhängt und sich aus folgender Zusammenstellung ergibt:
Inhalt von
datenname-1
ungleich 0?DVS-Code
ungleich 0?Wert von
datenname-2-1Wert von
datenname-2-2nein nicht relevant undefiniert undefiniert ja nein 0 undefiniert ja ja 64 DVS-Code der zugeordneten Fehlermeldung Die DVS-Codes und die zugeordneten Fehlermeldungen können dem Handbuch [4] entnommen werden.
Achtung
Für zeilensequenzielle Dateien steht nur der durch datenname-1 repräsentierte Ein-/ Ausgabezustand zur Verfügung.
Die Zustandswerte und ihre Bedeutung beziehen sich i.d.R. auf satzsequenzielle Dateien. Bei der Verarbeitung zeilensequenzieller Dateien müssen bezüglich der Interpretation der Zustandswerte die spezifischen Eigenheiten der zeilensequenziellen Organisation (siehe Abschnitt „Zeilensequenzielle Dateien") berücksichtigt werden.
Ein-/Ausgabe- Zustand | Bedeutung |
Erfolgreiche Ausführung | |
00 | Die Ein-/Ausgabe-Anweisung wurde erfolgreich ausgeführt. Es ist keine weitere Information bezüglich der Ein-/Ausgabe-Operation verfügbar. |
04 | Satzlängenkonflikt: Eine READ-Anweisung wurde erfolgreich ausgeführt. Die Länge des gelesenen Datensatzes liegt jedoch nicht in den Grenzen, die durch die Satzbeschreibungen der Datei festgelegt wurden. |
05 | Erfolgreicher OPEN INPUT/I-O/EXTEND auf eine Datei mit OPTIONAL-Angabe, die zum Zeitpunkt der Ausführung der OPEN-Anweisung nicht vorhanden war. |
07 |
|
Erfolglose Ausführung: Endebedingung | |
10 |
|
Erfolglose Ausführung: Permanenter Fehler | |
30 |
|
34 | Es wurde versucht, außerhalb der vom System festgelegten Bereichsgrenzen einer sequenziellen Datei zu schreiben. |
35 | Es wurde versucht, eine OPEN-Anweisung mit INPUT-/I-O-Angabe für eine nicht vorhandene Datei auszuführen. |
37 | OPEN-Anweisung auf eine Datei, die auf folgende Weise nicht eröffnet werden kann:
|
38 | Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die vorher mit der LOCK-Angabe geschlossen wurde. |
39 | Die OPEN-Anweisung war aus einem der folgenden Gründe erfolglos:
|
Erfolglose Ausführung: Logischer Fehler | |
41 | Es wurde versucht, eine OPEN-Anweisung für eine Datei auszuführen, die bereits eröffnet ist. |
42 | Es wurde versucht, eine CLOSE-Anweisung für eine Datei auszuführen, die nicht eröffnet ist. |
43 | Bei Zugriff auf eine Plattenspeicherdatei, die mit OPEN I-O eröffnet wurde Die letzte vor Ausführung einer REWRITE-Anweisung ausgeführte Ein-/Ausgabe-Anweisung war keine erfolgreich ausgeführte READ-Anweisung. |
44 | Überschreiten der Bereichsgrenzen:
|
46 | Es wurde versucht, eine READ-Anweisung für eine Datei auszuführen, die sich im Eröffnungsmodus INPUT oder I-O befindet; ein nächster gültiger Datensatz steht aber nicht zur Verfügung. Grund:
|
47 | Es wurde versucht, eine READ-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus INPUT oder I-O befindet. |
48 | Es wurde versucht, eine WRITE-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus OUTPUT oder EXTEND befindet. |
49 | Es wurde versucht, eine REWRITE-Anweisung für eine Datei auszuführen, die sich nicht im Eröffnungsmodus I-O befindet. |
Sonstige erfolglose Ausführungen | |
90 | Systemfehler; es ist keine weitere Information über die Ursache vorhanden. |
91 | Systemfehler; ein Systemaufruf war nicht erfolgreich; entweder OPEN-Fehler oder kein freies Gerät; die eigentliche Ursache ist aus dem DVS-Code ersichtlich (siehe „FILE-STATUS-Klausel“) |
95 | Unverträglichkeit zwischen den Angaben im BLOCK-CONTROL-INFO- oder BUFFER-LENGTH-Operanden des ADD-FILE-LINK-Kommandos und dem Dateiformat, der Blockgröße oder dem Format des verwendeten Datenträgers. |
Tabelle 24: Ein-/Ausgabezustände für sequenzielle Dateien