Die WRITE-Anweisung

Diese Anweisung wird bei Dateien verwendet, die mit OPEN OUTPUT oder OPEN EXTEND geöffnet wurden. Mit Hilfe dieses Befehls werden Datensätze in eine Datei geschrieben. Genau wird der Inhalt des Ausgabepuffers auf den Datenträger übertragen.
Während beim READ-Befehl immer aus einer Datei gelesen wird, so wird hier ein Satz geschrieben. Hinter WRITE wird daher ein Satzname angegeben. Dieser muß dem, in der FD nach der Stufennummer 01 angegebenen Satznamen entsprechen.
Wurde nach der ASSIGN-Klausel ein FILE STATUS-Feld angegeben, so wird dessen Inhalt durch die Verwendung des WRITE-Befehls verändert.

Verwendung bei index-sequentiellen Dateien:
Die WRITE-Anweisungen kann in diesem Fall nur verwendet werden, wenn die Datei mit Ausgabe- oder Aktualisierungsmodus geöffnet wurde.

INVALID KEY-Zusatz
Dieser Zusatz kann wie bei der READ-Anweisung verwendet werden, um eine Anweisung ausführen zu lassen, wenn das Schreiben des Satzes in eine index-sequentielle oder relative Datei fehlschlug. Dies kann zum Beispiel der Fall sein, wenn ein bereits vergebener Primärschlüssel erneut verwendet wird. Ein evtl. vorhandenes FILE STATUS-Feld würde dann mit '22' gefüllt.

WRITE K-Satz INVALID KEY DISPLAY "Schreibfehler" AT 1020.


FROM-Zusatz
Dieser Zusatz bewirkt die Übertragung eines Feldinhaltes in den Ausgabepuffer, bevor der entsprechende Satz auf dem Datenträger geschrieben wird.

WRITE Drucksatz FROM A-Satz.



Zeilen- und Seitensteuerung beim Drucken
Mit Hilfe des ADVANCING-Zusatzes kann man bestimmen, wann etwas gedruckt werden soll. So kann bestimmt werden ob etwas vor oder nach einem Seitenwechsel oder nach oder vor X Zeilenvorschüben ausgedruckt werden soll.

AFTER ADVANCING
Hiermit kann bestimmt werden, nach welchem Ereignis gedruckt werden soll. Als Ereignis kommen dabei ein Seitenwechsel (PAGE) oder ein Zeilenvorschub in Betracht.
Soll der Ausdruck beispielsweise auf den Seitenwechsel folgen, so würde man codieren:

WRITE Satz AFTER PAGE.

Wie man sieht, kann das Wort ADVANCING wegfallen.
Soll der Ausdruck nach drei Leerzeilen stattfinden, so werden die dafür nötigen vier Zeilenvorschübe durch

WRITE Satz AFTER 4.

erreicht.

BEFORE ADVANCING
Vorab: Auch hier kann auf das Wort ADVANCING weggelassen werden. Hier erfolgt der Ausdruck vor dem Seiten- oder Zeilenvorschub. Mit

WRITE Satz BEFORE 1.

wird der Druckkopf nach dem Druck auf den Anfang der folgenden Zeile positioniert.

Wurde in der FILE SECTION der LINAGE-Zusatz verwendet, so kommen noch folgende Zusätze in Betracht:

AT END-OF-PAGE und NOT AT END-OF-PAGE
Auf diese Zusätze folgen jeweils Anweisungen, welche eintreten sollen, wenn das Seitenende erreicht (END-OF-PAGE) oder noch nicht erreicht (NOT END-OF-PAGE) ist. Dabei ist das Seitenende dann erreicht, wenn der Wert des LINAGE-COUNTERS den hinter FOOTING angegebenen Wert erreicht oder überschritten hat.


Druckersteuerung mit WRITE
Will man das Druckbild beim Ausdruck verändern (Fettdruck, Kursive Schrift o.ä.), so kann man dies, indem man die zu dem jeweiligen Drucker gehörenden Steuerzeichen verwendet. Diese ESCAPE-Sequenzen findet man im Druckerhandbuch. Ein guter alter NEC P6 Nadelhauer hat zur unterstichenen Darstellung den Hex-Code "1B5F". Soll ein Text also auf so einem Krachmacher in unterstrichener Darstellungsart dargestellt werden so würde dies in etwa so aussehen:

ENVIRONMENT DIVISION.
          :

INPUT-OUTPUT SECTION.
FILE CONTROL.
   SELECT Text ASSIGN TO PRINTER.
          :

DATA DIVISION.
FILE SECTION.
FD Text.
01 Textsatz PIC X(72).
          :

WORKING-STORAGE SECTION.
01 Steuersatz.
   05 Steuerung PIC XX.
   05 FILLER PIC X(5).
   05 Filler PIC X(65).
          :

PROCEDURE DIVISION.
   MOVE X"1B5F" TO Steuerung.
   WRITE Textsatz FROM Steuersatz AFTER PAGE.   
          :          


...