Salt la conținutul principal
Modulul 5 · Lecția 2 din 210/10 în curs~15 min
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:

COBOL
       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:

COBOL
       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 clauzele SELECT și FD), 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 fi WS-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). Scrierea WRITE SALES-FILE este o eroare de sintaxă comună care va împiedica compilarea.

COBOL
       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:

COBOL
       CLOSE SALES-FILE.

Rețineți că instrucțiunea CLOSE ia ca argument numele fișierului logic, nu numele înregistrării.


Încearcă-l

Exercițiu#cobol.m5.l2.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#cobol.m5.l2.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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