Mit @CLOSE wird eine geöffnete Datei evtl. zurück geschrieben, anschließend geschlossen, und die Arbeitsdatei wird gelöscht.
Operation | Operanden | F-Modus, L-Modus |
@CLOSE | [ {NOWRITE | CODE={name | *EDT | *FILE } } ] |
NOWRITE | Die Arbeitsdatei wird gelöscht und nicht zurück geschrieben. Die geöffnete Datei bzw. das Bibliothekselement wird unverändert geschlossen. Bei einer real geöffneten Datei in der Arbeitsdatei 0 (siehe @OPEN, Format 2) ist |
CODE= | Der Operand steuert, in welchem Zeichensatz die Arbeitsdatei geschrieben Ist der Operand nicht angegeben und unterscheidet sich der Zeichensatz
ausgegeben. Bei der Antwort |
name | Zeichensatz, der beim Schreiben verwendet werden soll. Es muss der Name eines gültigen Zeichensatzes angegeben werden (siehe Abschnitt |
*FILE | Die Arbeitsdatei wird vor dem Schreiben in den Zeichensatz der existierenden SAM-Datei oder ISAM-Datei, des Bibliothekselements oder den beim Öffnen der POSIX-Datei verwendeten Zeichensatz umcodiert. War dieser Zeichensatz |
*EDT | Beim Schreiben wird der Zeichensatz der Arbeitsdatei verwendet, unabhängig davon, ob eine eventuell existierende Datei einen anderen Zeichensatz hat. |
Die Anweisung @CLOSE wird mit der Fehlermeldung EDT5177
abgewiesen, wenn in der aktuellen Arbeitsdatei keine Datei oder kein Bibliothekselement mit @OPEN bzw.
@XOPEN geöffnet ist.
Nach dem Schließen wird für SAM-Dateien, ISAM-Dateien und Bibliothekselemente der beim Schreiben verwendete Zeichensatz in den Katalog eingetragen.
Wird die Arbeitsdatei vor dem Schreiben umcodiert und enthält sie Zeichen, die im Zeichensatz der zu schreibenden Datei ungültig sind, werden diese durch ein Ersatzzeichen ersetzt, sofern ein solches spezifiziert ist (siehe @PAR SUBSTITUTION-CHARACTER), andernfalls wird die Datei nicht geschrieben, sie bleibt geöffnet und die Fehlermeldung EDT5453
wird ausgegeben. Der Benutzer kann dann ein Ersatzzeichen definieren oder den Zeichensatz für das Schreiben verändern und @CLOSE erneut ausführen.
Enthält die Arbeitsdatei Zeilen, die für die zu schreibende Datei zu lang sind (z.B. bei fester Satzlänge der Datei) oder entstehen durch die Konvertierung solche Sätze (bei Unicode-Zeichensätzen möglich), dann wird der Schreibvorgang mit der Meldung EDT5444
abgebrochen.
Beim Schreiben von ISAM-Dateien wird der ISAM-Schlüssel aus der Zeilennummer gebildet, wenn beim Öffnen der Datei KEY=LINENUMBER
oder KEY=IGNORE
angegeben wurde. Wurde beim Öffnen KEY=DATA
angegeben, wird der ISAM-Schlüssel aus dem Datenbereich übernommen. In diesem Fall muss der Benutzer sicherstellen, dass die Reihenfolge der Arbeitsdateisätze der Reihenfolge der ISAM-Schlüssel entspricht, da sonst das Schreiben mit der Meldung EDT4208
(DVS-Fehlercode 0AAB
) abgewiesen wird.
Die Definition von Sekundärschlüsseln einer ISAM-Datei in einem Sekundärindex bleibt nach @CLOSE erhalten, es sei denn, die Schlüsselfelder im Datenbereich wurden inkonsistent geändert. In diesem Fall wird die Meldung EDT5246
ausgegeben und der Sekundärindex wird gelöscht.
Wird während der Verarbeitung einer geöffneten ISAM-Datei der Zeichensatz von dem oder in den Zeichensatz UTF16
geändert, bzw. geschieht dies implizit durch entsprechende Angabe des CODE
-Operanden, kann die Datei nicht zurück geschrieben werden, da sich die Länge des Schlüsselfeldes dadurch ändern würde. In diesem Fall wird die @CLOSE-Anweisung mit der Fehlermeldung EDT5468
abgewiesen.
Nach dem Schließen einer SAM- oder ISAM-Datei mit @CLOSE gibt der EDT normalerweise den nicht benötigten Speicherplatz der Datei frei. Die Freigabe kann durch Setzen des Auftragsschalters 7 verhindert werden.
Wurde beim Öffnen einer ISAM-Datei zur realen Bearbeitung (siehe @OPEN, Format 2) die aktuelle Versionsnummer angegeben, der Operand AS
jedoch nicht, dann wird nach @CLOSE die aktualisierte (um 1 erhöhte) Versionsnummer angezeigt.
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.
Hinweis
Bei der Ausführung von @CLOSE wird implizit ein @DELETE (Format 2) für die aktuelle Arbeitsdatei ausgeführt. Dabei werden verschiedene Eigenschaften der Arbeitsdatei auf ihren Initialwert zurückgesetzt.
Beispiel
@OPEN FILE=DATEI1 ------------------------------------------------------ (1) <EDT-Anweisungen> ------------------------------------------------------ (2) @CLOSE CODE=UTFE ------------------------------------------------------- (3)
(1) Die Datei DATEI1
wird geöffnet und in dem Zeichensatz der Datei in die aktuelle Arbeitsdatei eingelesen.
(2) Die aktuelle Arbeitsdatei wird bearbeitet.
(3) Die aktuelle Arbeitsdatei wird in den Zeichensatz UTFE
umcodiert und in die Datei DATEI1
zurück geschrieben. Im BS2000-Katalog erhält DATEI1
das Attribut CODED-CHARACTER-SET=UTFE
. Die aktuelle Arbeitsdatei wird gelöscht.