Direct naar de hoofdinhoud
Module 5 · Les 2 van 210/10 in de cursus~15 min
Modulelessen (2/2)

Bestand I/O-bewerkingen

Zodra een bestand is gekoppeld en gedeclareerd in de DATA DIVISION, kunnen we het manipuleren in de PROCEDURE DIVISION. In COBOL volgt het beheer van de levenscyclus van bestanden een standaard, dwingende stroom: openen, bewerkingen uitvoeren (lezen of schrijven) en sluiten.


1. Bestanden openen: de OPEN-verklaring

Voordat u van een bestand kunt lezen of ernaar kunt schrijven, moet het worden geopend door de juiste toegangsmodus op te geven:

COBOL
       OPEN INPUT SALES-FILE.

De belangrijkste modi zijn:

  • INPUT: het bestand wordt geopend in de alleen-lezenmodus. Het bestand moet op schijf bestaan, anders mislukt het programma.
  • OUTPUT: het bestand wordt geopend in de schrijfmodus. Als het bestand al bestaat, wordt de vorige inhoud verwijderd (overschrijven). Als het niet bestaat, wordt het gemaakt.
  • EXTEND: het bestand wordt geopend om gegevens toe te voegen. Nieuwe records worden geschreven vanaf het einde van het bestaande bestand.
  • I-O: het bestand wordt geopend voor zowel lezen als schrijven (meestal gebruikt voor relatieve of geïndexeerde toegangsbestanden, niet voor lineaire sequentiële bestanden).

2. Gegevens lezen: de READ-verklaring

Om een ​​record uit een sequentieel bestand te lezen, gebruiken we de instructie READ. Omdat we niet van tevoren weten hoeveel records het bestand bevat, moeten we altijd de einde-van-bestand-voorwaarde (EOF) afhandelen met behulp van de AT END-clausule:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: Houd er rekening mee dat de instructie verwijst naar de logische bestandsnaam (gedefinieerd in de clausules SELECT en FD), niet naar de recordnaam.
  • AT END: Specificeert de instructies die moeten worden uitgevoerd wanneer u probeert voorbij de laatst beschikbare record te lezen. Normaal gesproken stelt u een vlagvariabele (zoals WS-EOF) in op "Y".
  • END-READ: Beëindigt expliciet de leesinstructie.

3. Gegevens schrijven: de WRITE-instructie

Om gegevens in een bestand in te voegen, gebruiken we de instructie WRITE.

[!WAARSCHUWING] In COBOL lees je een bestand (READ SALES-FILE), maar je schrijft een record (WRITE SALES-RECORD). Het schrijven van WRITE SALES-FILE is een veel voorkomende syntaxisfout die compilatie verhindert.

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

Voordat de instructie WRITE wordt uitgevoerd, moeten de ondergeschikte velden van de FD-recordstructuur (in dit geval SALES-RECORD) in het geheugen worden ingevuld.


4. Bestanden sluiten: de CLOSE-verklaring

Wanneer de verwerking is voltooid, moet elk geopend bestand worden gesloten om systeembronnen vrij te maken en ervoor te zorgen dat alle gegevens naar schijf worden geschreven:

COBOL
       CLOSE SALES-FILE.

Houd er rekening mee dat de instructie CLOSE de logische bestandsnaam als argument gebruikt, en niet de recordnaam.


Probeer het eens

Oefening#cobol.m5.l2.e1
Pogingen: 0Laden…

Voltooi de PROCEDURE-DIVISIE door SALES-FILE te openen in de INPUT-modus, het eerste record te lezen en de WS-EOF-controlevariabele in te stellen op 'Y' wanneer het einde van het bestand is bereikt. Vergeet ten slotte niet om het bestand te sluiten voordat u stopt.

Editor laden…
Toon hint

Schrijf in volgorde: OPEN INPUT VERKOOPBESTAND. LEES VERKOOPBESTAND BIJ EINDE. VERPLAATS 'Y' NAAR WS-EOF EINDE-LEZEN. SLUIT vervolgens VERKOOPFILE. en ten slotte STOP REN.

Oplossing beschikbaar na 3 pogingen

Oefening#cobol.m5.l2.e2
Pogingen: 0Laden…

Voltooi de PROCEDURE-DIVISIE door het VERKOOPBESTAND te openen in de OUTPUT-modus. Verplaats de waarde 1001 naar SALES-ID en 250,50 naar SALES-AMOUNT en schrijf vervolgens het SALES-RECORD naar het bestand. Sluit ten slotte het bestand voordat u het programma stopt.

Editor laden…
Toon hint

Open het bestand met OPEN OUTPUT SALES-FILE., gebruik MOVE om waarden toe te wijzen aan SALES-ID en SALES-AMOUNT, voer WRITE SALES-RECORD uit. (schrijf het record, niet het bestand!), sluit af met VERKOOPBESTAND SLUITEN. en beëindig met STOP RUN.

Oplossing beschikbaar na 3 pogingen