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:
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:
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 clausulesSELECTenFD), 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 (zoalsWS-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 vanWRITE SALES-FILEis een veel voorkomende syntaxisfout die compilatie verhindert.
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:
CLOSE SALES-FILE.Houd er rekening mee dat de instructie CLOSE de logische bestandsnaam als argument gebruikt, en niet de recordnaam.
Probeer het eens
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.
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
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.
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