Przejdź do głównej treści
eLearner.app
Moduł 5 · Lekcja 2 z 210/10 w kursie~15 min
Lekcje modułu (2/2)

Operacje We/Wy na Plikach

Gdy plik zostanie powiązany i zadeklarowany w sekcji DATA DIVISION, możemy nim manipulować w sekcji PROCEDURE DIVISION. W COBOL-u zarządzanie cyklem życia plików odbywa się w standardowy i deklaratywny sposób: otwarcie, operacja (odczyt lub zapis) i zamknięcie.


1. Otwieranie plików: Instrukcja OPEN

Przed rozpoczęciem odczytu lub zapisu pliku należy go otworzyć, wskazując odpowiedni tryb dostępu:

Code
       OPEN INPUT SALES-FILE.

Główne tryby dostępu to:

  • INPUT: Plik jest otwierany tylko do odczytu. Plik musi istnieć na dysku, w przeciwnym razie program zgłosi błąd.
  • OUTPUT: Plik jest otwierany do zapisu. Jeśli plik już istnieje, jego poprzednia zawartość zostanie usunięta (nadpisanie). Jeśli nie istnieje, zostanie utworzony.
  • EXTEND: Plik jest otwierany w celu dodawania danych (append). Nowe rekordy będą dopisywane od końca istniejącego pliku.
  • I-O: Plik jest otwierany zarówno do odczytu, jak i do zapisu (stosowany głównie do plików o dostępie relatywnym lub indeksowanym, nie do sekwencyjnych plików liniowych).

2. Odczyt danych: Instrukcja READ

Do odczytania rekordu z pliku sekwencyjnego służy instrukcja READ. Ponieważ nie wiemy z góry, ile rekordów zawiera plik, należy zawsze obsłużyć warunek końca pliku (EOF - End Of File) przy użyciu klauzuli AT END:

Code
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: Zauważ, że instrukcja odwołuje się do nazwy logicznej pliku (zdefiniowanej w SELECT i FD), a nie do rekordu.
  • AT END: Określa instrukcje do wykonania przy próbie odczytu poza ostatni dostępny rekord. Zazwyczaj ustawia się flagę (taką jak WS-EOF) na wartość "Y".
  • END-READ: Jawnie kończy instrukcję odczytu.

3. Zapisywanie danych: Instrukcja WRITE

Do dodawania danych do pliku służy instrukcja WRITE.

[!WARNING] W COBOL-u odczytuje się plik (READ SALES-FILE), ale zapisuje rekord (WRITE SALES-RECORD). Zapis WRITE SALES-FILE to częsty błąd składniowy uniemożliwiający kompilację.

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

Przed wykonaniem instrukcji WRITE pola podrzędne struktury grupowej rekordu FD (w tym przypadku SALES-RECORD) muszą zostać odpowiednio uzupełnione w pamięci.


4. Zamykanie plików: Instrukcja CLOSE

Po zakończeniu przetwarzania każdy otwarty plik musi zostać obowiązkowo zamknięty, aby zwolnić zasoby systemowe i upewnić się, dass wszystkie dane zostały faktycznie zapisane na dysku:

Code
       CLOSE SALES-FILE.

Zauważ, że instrukcja CLOSE przyjmuje jako argument nazwę logiczną pliku (a nie rekordu).


Spróbuj sam

Ćwiczenie#cobol.m5.l2.e1
Próby: 0Ładowanie...

Uzupełnij PROCEDURE DIVISION, otwierając plik SALES-FILE w trybie INPUT, odczytując pierwszy rekord i ustawiając zmienną WS-EOF na 'Y' po osiągnięciu końca pliku. Na koniec pamiętaj o zamknięciu pliku przed zakończeniem programu.

Ładowanie edytora...
Pokaż wskazówkę

Napisz w kolejności: OPEN INPUT SALES-FILE. potem READ SALES-FILE AT END MOVE 'Y' TO WS-EOF END-READ. potem CLOSE SALES-FILE. i na końcu STOP RUN.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#cobol.m5.l2.e2
Próby: 0Ładowanie...

Uzupełnij PROCEDURE DIVISION, otwierając plik SALES-FILE w trybie OUTPUT. Przenieś wartość 1001 do pola SALES-ID oraz 250.50 do pola SALES-AMOUNT, a następnie zapisz rekord SALES-RECORD w pliku. Na koniec zamknij plik przed zatrzymaniem programu.

Ładowanie edytora...
Pokaż wskazówkę

Otwórz plik za pomocą OPEN OUTPUT SALES-FILE., użyj MOVE do nadania wartości polom SALES-ID i SALES-AMOUNT, wykonaj WRITE SALES-RECORD. (zapisując rekord, nie plik!), zamknij plik za pomocą CLOSE SALES-FILE. i zakończ za pomocą STOP RUN.

Rozwiązanie dostępne po 3 próbach