COBOL - układ danych
Układ COBOL to opis użycia każdego pola i wartości w nim zawartych. Poniżej znajdują się wpisy opisu danych używane w języku COBOL -
- Klauzula redefiniuje
- Klauzula Renames
- Klauzula użytkowania
- Copybooks
Klauzula redefiniuje
Klauzula redefines służy do definiowania magazynu z innym opisem danych. Jeśli jeden lub więcej elementów danych nie jest używanych jednocześnie, to ta sama pamięć może być wykorzystana dla innego elementu danych. Zatem do tego samego miejsca przechowywania można odnosić się z różnymi elementami danych.
Składnia
Poniżej znajduje się składnia klauzuli Redefines -
01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
Poniżej znajdują się szczegóły użytych parametrów -
- WS-OLD to pozycja przedefiniowana
- WS-NEW1 i WS-NEW2 to przedefiniowanie przedmiotu
Numery poziomów przedefiniowanego elementu i przedefiniowanego elementu muszą być takie same i nie mogą być numerami poziomu 66 lub 88. Nie używaj klauzuli VALUE z przedefiniowującym elementem. W sekcji Plik nie używaj klauzuli redefinines z numerem poziomu 01. Definicja przedefiniowania musi być kolejnym opisem danych, który chcesz przedefiniować. Przedefiniowany element zawsze będzie miał taką samą wartość jak przedefiniowany element.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-DATE1 VALUE '20140831'.
10 WS-YEAR PIC X(4).
10 WS-MONTH PIC X(2).
10 WS-DATE PIC X(2).
05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).
PROCEDURE DIVISION.
DISPLAY "WS-DATE1 : "WS-DATE1.
DISPLAY "WS-DATE2 : "WS-DATE2.
STOP RUN.
JCL aby wykonać powyższy program w języku COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Kiedy kompilujesz i wykonujesz powyższy program, daje to następujący wynik -
WS-DATE1 : 20140831
WS-DATE2 : 20140831
Klauzula Renames
Klauzula Renames służy do nadania różnych nazw istniejącym elementom danych. Służy do ponownego grupowania nazw danych i nadawania im nowej nazwy. Nowe nazwy danych można zmieniać w grupach lub elementarnych elementach. Poziom numer 66 jest zarezerwowany na zmiany nazw.
Syntax
Poniżej znajduje się składnia klauzuli Renames -
01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.
Zmiana nazwy jest możliwa tylko na tym samym poziomie. W powyższym przykładzie WS-A, WS-B i WS-C są na tym samym poziomie. Definicja Renames musi być kolejnym opisem danych, którego nazwę chcesz zmienić. Nie używaj opcji Renames z numerami poziomów 01 lub 77. Nazwy danych używane do zmiany nazw muszą występować w kolejności. Nie można zmienić nazw elementów danych z klauzulą wystąpienia.
Example
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.
66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.
PROCEDURE DIVISION.
DISPLAY "WS-RENAME : " WS-RENAME.
STOP RUN.
JCL aby wykonać powyższy program w języku COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -
WS-RENAME : 56AABB
Klauzula użytkowania
Klauzula użycia określa system operacyjny, w którym przechowywane są dane formatu. Nie można jej używać z poziomami 66 lub 88. Jeśli klauzula użycia jest określona na grupie, wszystkie elementy elementarne będą miały tę samą klauzulę użycia. Różne opcje dostępne w klauzuli Usage są następujące -
Pokaz
Pozycja danych jest przechowywana w formacie ASCII, a każdy znak zajmuje 1 bajt. Jest to użycie domyślne.
Poniższy przykład oblicza liczbę wymaganych bajtów -
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.
01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.
COMPUTATIONAL / COMP
Pozycja danych jest przechowywana w formacie binarnym. Tutaj elementy danych muszą być liczbami całkowitymi.
Poniższy przykład oblicza liczbę wymaganych bajtów -
01 WS-NUM PIC S9(n) USAGE IS COMP.
If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.
COMP-1
Element danych jest podobny do rzeczywistego lub zmiennoprzecinkowego i jest reprezentowany jako liczba zmiennoprzecinkowa o pojedynczej precyzji. Wewnętrznie dane są przechowywane w formacie szesnastkowym. COMP-1 nie akceptuje klauzuli PIC. Tutaj 1 słowo odpowiada 4 bajtom.
COMP-2
Element danych jest podobny do Long lub Double i jest reprezentowany jako liczba zmiennoprzecinkowa podwójnej precyzji. Wewnętrznie dane są przechowywane w formacie szesnastkowym. COMP-2 nie określa klauzuli PIC. Tutaj 2 słowo równa się 8 bajtom.
COMP-3
Pozycja danych jest przechowywana w spakowanym formacie dziesiętnym. Każda cyfra zajmuje pół bajta (1 półbajt), a znak jest przechowywany na skrajnym prawym miejscu.
Poniższy przykład oblicza liczbę wymaganych bajtów -
01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)
01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.
01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.
Zeszyty
Zeszyt w języku COBOL to zbiór kodu definiującego struktury danych. Jeśli w wielu programach używana jest określona struktura danych, to zamiast ponownie pisać tę samą strukturę danych, możemy korzystać z zeszytów. Używamy instrukcji COPY, aby dołączyć zeszyt do programu. Instrukcja COPY jest używana w sekcji WorkingStorage.
Poniższy przykład zawiera zeszyt wewnątrz programu w języku COBOL -
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.
Tutaj ABC to nazwa zeszytu. Następujące elementy danych z zeszytu ABC mogą być używane wewnątrz programu.
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.