Omgeving: input-output
Arnout van Kempen over rommelen in een digitale wereld.
In de Environment division geef je, zo nodig, ook de I/O devices en de te gebruiken bestanden weer. Dit gebeurt in de Input-output section, die weer is verdeeld in twee paragrafen: File control en I-O control.
In de eerste paragraaf kan je met het commando SELECT logische bestandsnamen, zoals je die in je programma gaat gebruiken, koppelen aan fysieke bestandsnamen zoals het besturingssysteem ze kent. Je geeft hierbij ook aan op welke manier die bestanden zijn georganiseerd en benaderd kunnen worden. Denk hierbij aan mogelijkheden als sequentiële of geïndexeerde organisatie en sequentiële of random access benadering. Je kan daarbij aangeven welke sleutelvelden een bestand kent en waar de I/O-status wordt opgeslagen. Bijvoorbeeld:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CustomerFile ASSIGN TO "CUSTOMER.DAT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-CUSTOMER-STATUS.
SELECT OrdersFile ASSIGN TO "ORDERS.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS Order-ID
FILE STATUS IS WS-ORDERS-STATUS.
In de tweede paragraaf, I-O-CONTROL, kan je desgewenst nog wat nauwkeuriger zaken voor input/output weergeven. Zo betekent
I-O-CONTROL.
APPLY WRITE-ONLY TO OrdersFile.
RERUN ON FILE OrdersFile
AT END RESTART PROCESSING FROM RECORD 100.
dat de OrdersFile in dit programma alleen geschreven zal worden, niet gelezen. En als het programma een tweede keer wordt uitgevoerd, zal begonnen worden bij record 100.
Ten slotte nog een andere toepassing van deze divisie. Uit Linux en Windows kennen we het gebruik van stdin, stdout en stderr als logische bestanden, die fysiek zijn gekoppeld aan de terminal (toetsenbord, beeldscherm, beeldscherm). We maken daar gebruik van als we programma's via een pipe koppelen ( cat bestand|more) en we kunnen die kanalen afvangen en bijvoorbeeld naar een printer sturen, of naar een ander bestand (cat bestand>lpt1). COBOL kan dat ook, maar wil dan wel weten hoe dat er precies uit gaat zien, door dergelijke kanalen aan een bestandsnaam te koppelen:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PrintFile ASSIGN TO PRINTER
ORGANIZATION IS LINE SEQUENTIAL.
SELECT TerminalInput ASSIGN TO SYSIN
ORGANIZATION IS LINE SEQUENTIAL.
SELECT TerminalOutput ASSIGN TO SYSOUT
ORGANIZATION IS LINE SEQUENTIAL.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Over bits & bytes
Arnout van Kempen over rommelen in een digitale wereld.
En arrays dan?
Arnout van Kempen over rommelen in een digitale wereld.
Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.
Bestanden in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.