Lecții din modul (2/2)
Operațiuni I/O de fișiere
Odată ce un fișier a fost asociat și declarat în DATA DIVISION, îl putem manipula în interiorul PROCEDURE DIVISION. În COBOL, gestionarea ciclului de viață al fișierelor urmează un flux standard, imperativ: deschideți, efectuați operațiuni (citire sau scriere) și închideți.
1. Deschiderea fișierelor: Declarația OPEN
Înainte de a putea citi sau scrie într-un fișier, acesta trebuie deschis prin specificarea modului de acces adecvat:
OPEN INPUT SALES-FILE.Principalele moduri sunt:
INPUT: fișierul este deschis în modul doar citire. Fișierul trebuie să existe pe disc, altfel programul va eșua.OUTPUT: fișierul este deschis în modul de scriere. Dacă fișierul există deja, conținutul său anterior este șters (suprascriere). Dacă nu există, este creat.EXTEND: fișierul este deschis pentru a adăuga date. Înregistrările noi vor fi scrise începând de la sfârșitul fișierului existent.I-O: fișierul este deschis atât pentru citire, cât și pentru scriere (folosit mai ales pentru fișiere cu acces relativ sau indexat, nu pentru fișiere secvențiale liniare).
2. Citirea datelor: Declarația READ
Pentru a citi o înregistrare dintr-un fișier secvenţial, folosim instrucţiunea READ. Deoarece nu știm în avans câte înregistrări conține fișierul, trebuie să gestionăm întotdeauna condiția de sfârșit de fișier (EOF) folosind clauza AT END:
READ SALES-FILE
AT END MOVE "Y" TO WS-EOF
END-READ.READ SALES-FILE: rețineți că instrucțiunea face referire la numele fișierului logic (definit în clauzeleSELECTșiFD), nu la numele înregistrării.AT END: Specifică instrucțiunile de rulat atunci când încercați să citiți dincolo de ultima înregistrare disponibilă. De obicei, setați o variabilă de tip flag (cum ar fiWS-EOF) la"Y".END-READ: termină explicit instrucțiunea citită.
3. Scrierea datelor: Declarația WRITE
Pentru a insera date într-un fișier, folosim instrucțiunea WRITE.
[!AVERTISMENT] În COBOL, citești un fișier (
READ SALES-FILE), dar scrii o înregistrare (WRITE SALES-RECORD). ScriereaWRITE SALES-FILEeste o eroare de sintaxă comună care va împiedica compilarea.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.Înainte de a executa instrucțiunea WRITE, câmpurile subordonate ale structurii de înregistrare FD (în acest caz, SALES-RECORD) trebuie să fie populate în memorie.
4. Închiderea fișierelor: Declarația CLOSE
Când procesarea este completă, fiecare fișier deschis trebuie închis pentru a elibera resursele de sistem și pentru a vă asigura că toate datele sunt scrise pe disc:
CLOSE SALES-FILE.Rețineți că instrucțiunea CLOSE ia ca argument numele fișierului logic, nu numele înregistrării.
Încearcă-l
Completați DIVIZIUNEA PROCEDURII prin deschiderea VÂNZĂRI-FIȘIER în modul INPUT, citind prima înregistrare și setând variabila de control WS-EOF la „Y” când se ajunge la sfârșitul fișierului. În cele din urmă, nu uitați să închideți fișierul înainte de a opri.
Afișează indiciu
Scrieți în ordine: OPEN INPUT VÂNZARE-FIȘIER. apoi CITIȚI FIȘIERUL DE VÂNZĂRI LA sfârșit MUTAȚI „Y” ÎN WS-EOF END-READ. apoi ÎNCHIDERE DOSARUL VÂNZĂRILOR. și în cele din urmă STOP RUN.
Soluție disponibilă după 3 încercări
Completați DIVIZIUNEA DE PROCEDURI deschizând FIȘIER DE VÂNZĂRI în modul IEȘIRE. Mutați valoarea 1001 în SALES-ID și 250,50 în SALES-AMOUNT, apoi scrieți SALES-RECORD în fișier. În cele din urmă, închideți fișierul înainte de a opri programul.
Afișează indiciu
Deschideți fișierul cu OPEN OUTPUT SALES-FILE., utilizați MOVE pentru a atribui valori SALES-ID și SALES-AMOUNT, executați WRITE SALES-RECORD. (se scrie înregistrarea, nu fișierul!), se închide cu CLOSE SALES-FILE. și se încheie cu STOP RUN.
Soluție disponibilă după 3 încercări