COBOL - Layout dei dati

Il layout COBOL è la descrizione dell'utilizzo di ogni campo e dei valori in esso presenti. Di seguito sono riportate le voci di descrizione dei dati utilizzate in COBOL:

  • Ridefinisce la clausola
  • Rinomina clausola
  • Clausola di utilizzo
  • Copybooks

Ridefinisce la clausola

La clausola Redefines viene utilizzata per definire una memoria con una descrizione dei dati diversa. Se uno o più elementi di dati non vengono utilizzati contemporaneamente, è possibile utilizzare la stessa memoria per un altro elemento di dati. Quindi la stessa memoria può essere riferita a diversi elementi di dati.

Sintassi

Di seguito è riportata la sintassi per la clausola 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).

Di seguito sono riportati i dettagli dei parametri utilizzati:

  • WS-OLD è un articolo ridefinito
  • WS-NEW1 e WS-NEW2 stanno ridefinendo l'elemento

I numeri di livello dell'elemento ridefinito e l'elemento ridefinito devono essere gli stessi e non può essere un numero di livello 66 o 88. Non utilizzare la clausola VALUE con un elemento di ridefinizione. Nella sezione File, non utilizzare una clausola di ridefinizione con numero di livello 01. La definizione di ridefinizione deve essere la successiva descrizione dei dati che si desidera ridefinire. Un elemento ridefinito avrà sempre lo stesso valore di un elemento ridefinito.

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 per eseguire il programma COBOL di cui sopra -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Quando compili ed esegui il programma sopra, produce il seguente risultato:

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Rinomina clausola

La clausola Renames viene utilizzata per assegnare nomi diversi agli elementi di dati esistenti. Viene utilizzato per raggruppare nuovamente i nomi dei dati e dare loro un nuovo nome. I nuovi nomi di dati possono essere rinominati in gruppi o elementi elementari. Il livello numero 66 è riservato per le ridenominazioni.

Syntax

Di seguito è riportata la sintassi per la clausola 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.

È possibile rinominare solo allo stesso livello. Nell'esempio precedente, WS-A, WS-B e WS-C sono allo stesso livello. La definizione di ridenominazione deve essere la successiva descrizione dei dati che si desidera rinominare. Non utilizzare Renames con i numeri di livello 01 o 77. I nomi dei dati utilizzati per i renames devono essere in sequenza. Gli elementi di dati con clausola occorrenza non possono essere rinominati.

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 per eseguire il programma COBOL di cui sopra -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Quando compili ed esegui il programma sopra, produce il seguente risultato:

WS-RENAME : 56AABB

Clausola di utilizzo

La clausola di utilizzo specifica il sistema operativo in cui vengono archiviati i dati in formato. Non può essere utilizzato con i numeri di livello 66 o 88. Se la clausola di utilizzo è specificata in un gruppo, tutti gli elementi elementari avranno la stessa clausola di utilizzo. Le diverse opzioni disponibili con la clausola di utilizzo sono le seguenti:

Schermo

L'elemento di dati è memorizzato in formato ASCII e ogni carattere richiederà 1 byte. È l'utilizzo predefinito.

L'esempio seguente calcola il numero di byte richiesti:

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.

COMPUTAZIONALE / COMP

L'elemento dati è archiviato in formato binario. Qui, gli elementi di dati devono essere interi.

L'esempio seguente calcola il numero di byte richiesti:

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

L'elemento dati è simile a Real o Float ed è rappresentato come un numero in virgola mobile a precisione singola. Internamente, i dati vengono archiviati in formato esadecimale. COMP-1 non accetta la clausola PIC. Qui 1 parola è uguale a 4 byte.

COMP-2

L'elemento dati è simile a Long o Double ed è rappresentato come numero in virgola mobile a doppia precisione. Internamente, i dati vengono archiviati in formato esadecimale. COMP-2 non specifica la clausola PIC. Qui 2 parole equivalgono a 8 byte.

COMP-3

L'elemento di dati viene memorizzato in formato decimale compresso. Ogni cifra occupa mezzo byte (1 nibble) e il segno viene memorizzato nel nibble più a destra.

L'esempio seguente calcola il numero di byte richiesti:

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.

Quaderni

Un quaderno COBOL è una selezione di codice che definisce le strutture di dati. Se una particolare struttura dati viene utilizzata in molti programmi, invece di scrivere di nuovo la stessa struttura dati, possiamo usare i quaderni. Usiamo l'istruzione COPY per includere un quaderno in un programma. L'istruzione COPY viene utilizzata nella sezione WorkingStorage.

L'esempio seguente include un quaderno all'interno di un programma COBOL:

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Qui ABC è il nome del quaderno. I seguenti elementi di dati nel quaderno ABC possono essere utilizzati all'interno di un programma.

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'.