Data Division

 

La DATA DIVISION si compone di due SECTION obbligatorie: la FILE SECTION, in cui si descrivono i record che costituiscono i file utilizzati dal programma dichiarati nella ENVIRONMENT DIVISION e la WORKING-STORAGE SECTION nella quale si dichiarano le aree di lavoro, e da altre due SECTION facoltative: la LINKAGE SECTION necessaria per la dichiarazione delle aree comuni al programma chiamante (se il nostro è un programma chiamato) e la SCREEN SECTION nella quale si dichiarano le aree dello schermo.

Qualsiasi area volessimo utilizzare nel programma deve essere precedentemente dichiarata nella DATA DIVISION.

 

 

dat-div1

 

 

 

 


 

 

 

 

File Section

 

In questa SECTION si descrive un file dichiarato nella ENVIRONMENT DIVISION tramite un FD, (File Description) la LABEL RECORD, il DATA RECORD (questi ultimi non sono obbligatori e si possono omettere). Le stesse regole si applicano a SD (Sort Description) e CD (Communication Description).


Prendiamo ad esempio un file contenente l'elenco degli impiegati composto da record formati da nome, cognome, posizione, codice fiscale e indirizzo questo a sua volta suddiviso in via/piazza, numero civico e città. Diamo per scontato che nella ENVIRONMENT DIVISION abbiamo già descritto di che tipo di file si tratta (in questo caso indexed ) e che lo abbiamo chiamato IMPIEGATI. Vediamo come lo descriveremo nella FILE SECTION:

 

                                                FILE SECTION.

                                                FD IMPIEGATI.

                                                LABEL RECORD IS STANDARD.

                                                DATA RECORD IS RECORD-IMPIEGATI.

Notate che ogni riga termina con un punto, esso è obbligatorio e l'omissione provocherebbe un errore di compilazione.

Qui a fianco abbiamo la rappresentazione grafica del Record Impiegati.                   Dobbiamo ora definirla all'interno del nostro programma in questo modo:

data-div2

 

                                                01  RECORD-IMPIEGATI.

                                                     02 COGNOME               PIC X(20).

                                                     02 NOME                      PIC X(20).   

                                                     02 POSIZIONE              PIC X(20).

                                                     02 CODICE-FISCALE     PIC X(16).

                                                     02 INDIRIZZO.

                                                         03 VIA-PIAZZA          PIC X(20).

                                                         03 NUMERO-CIVICO PIC 9(03).

                                                         03 CAP                     PIC 9(05).

                                                         03 CITTA                  PIC X(15).

 

 

La numerazione 01 sta ad indicare il primo livello ed identifica il campo del record denominato RECORD-IMPIEGATI, essendo questo costituito da sottolivelli non va indicata la lunghezza del campo, il livello 01 va a margine A.
I livelli 02 (NOME, COGNOME, POSIZIONE, CODICE-FISCALE) sono campi semplici bisogna quindi specificarne la lunghezza (il massimo numero di caratteri che può contenere) tramite la clausola PICTURE (PIC).
Il campo INDIRIZZO è dello stesso livello (02) si tratta però, in questo caso, di un livello che contiene altri livelli, possedendo quindi quest'ultima caratteristica ci limiteremo a definire il livello ed il nome.
Vengono infine i livelli 03 che dipendono da INDIRIZZO: VIA-PIAZZA (20 caratteri), NUMERO-CIVICO (3 caratteri), CAP (5 caratteri), CITTA (15 caratteri). I livelli 02 ed inferiori vanno a margine B, per una maggiore chiarezza nella lettura si usa un rientro a destra di tre caratteri per ogni livello inferiore.

 

Top


 

 

 

 

Working-Storage Section

La WORKING-STORAGE SECTION è il contenitore in cui sono dichiarate e definite le aree di lavoro utilizzate nel programma. Le aree di livello 01 vanno scritte a margine A, tutti i sottolivelli da margine B, in realtà, valgono le stesse regole applicate per la dichiarazione delle strutture record nella FILE SECTION.

                              

Un'area così strutturata:

data-div3

 

 

            Nella WORKING verrà così rappresentata:

                      01  DATA-ASSUNZIONE.
                           02 GG-ASS PIC 9(02).
                           02 MM-ASS PIC 9(02).
                           02 AA-ASS PIC 9(04).
                   data-div4

 


 

Nella WORKING si possono utilizzare fino a 49 livelli per ogni area, esistono poi:

Le aree di livello 77

aree di primo livello semplici, che non possono essere composte.

Si tende però ad utilizzare il meno possibile questo tipo di livello, in quanto risulta più semplice e conveniente in termini di stesura strutturata del codice dichiarare tre aree semplici con questo metodo:

Piuttosto che:

01 AREA-LAVORO.                     
02 CONFERMA PIC X(02). 77 CONFERMA PIC X(02).
02 ESITO       PIC X(02). 77 ESITO       PIC X(02).
02 ERRORE     PIC X(02). 77 ERRORE     PIC X(02).

 

Perchè quando ci troveremo di fronte alla necessità di dover "blankare" (cioè pulire, riempiendo i campi con spazi vuoti) le aree, nel primo caso sarà sufficiente la sola istruzione:

MOVE SPACE TO AREA-LAVORO.

Mentre nel secondo sarà necessario agire separatamente per ogni area.


 

Le aree di livello 78

aree di primo livello semplici, che non possono essere composte e che definiscono nomi di costanti, campi cioè che vengono inizializzati con un determinato valore e che non può essere alterato durante lo svolgimento del programma:

 

78 COSTANTE-1 PIC X(19) VALUE "Intestazione Pagina".
78 COSTANTE-2 PIC X(11) VALUE "Sottotitolo".            

 


 

Le aree di livello 88

aree che definiscono nomi condizionali associati a variabili condizionali, campi cioè che assegnano un nome ad un area quando assume un determinato valore.

 

01 CONFERMA PIC X(01).
      88 OK         VALUE "S".
      88 ANNULLA VALUE "N".

 


 

Negli esempi precedenti abbiamo utilizzato la clausola

VALUE

questa clausola ci consente di assegnare all'area un valore prima dell'inizio del programma:

 

     01 AREA-LAVORO.                              
     02 CONFERMA PIC X(01) VALUE "S".
           02 ESITO       PIC X(05) VALUE SPACE. 
           02 ERRORE     PIC X(02) VALUE ZERO.   

 

Top


 

 

 

Linkage Section

Si verifica spesso che programmi diversi debbano eseguire operazioni comuni, come ad esempio il controllo dell'esattezza di una data inserita. Dovremmo allora riscrivere ogni volta le stesse istruzioni o, ben che vada, eseguire tutta una serie di copia-incolla all'interno di ogni programma per eseguire questo controllo, allungando così il nostro codice? Per fortuna ci viene in aiuto la LINKAGE SECTION che ci consente di definire le aree dei dati comuni tra due programmi. Se ad esempio utilizziamo un programma (chiamante) che ci richiede l'immissione di una data, per controllare l'esattezza della data inserita passeremo l'area DATA-ASSUNZIONE dichiarata nella WORKING-STORAGE SECTION del programma chiamante al programma chiamato con il comando:

CALL "nomeprogramma" USING DATA-ASSUNZIONE.

Nel programma chiamato ci metteremo la LINKAGE SECTION con la definizione di DATA-ASSUNZIONE:

 
LINKAGE SECTION.
       01  DATA-ASSUNZIONE.
                 02 GG-ASS  PIC 9(02). 
                 02 MM-ASS PIC 9(02). 

                02 AA-ASS  PIC 9(04).

A fine esecuzione del programma chiamato inseriremo il comando:
CANCEL "nomeprogramma".
per liberare memoria.
La LINKAGE SECTION ci consente in sostanza di eseguire operazioni comuni a più programmi scrivendo una sola volta il codice necessario ed a richiamarlo ogni volta ce ne sia bisogno con una sola istruzione.

Top


 

Screen Section

La SCREEN SECTION si occupa della gestione del video. Il video viene visto dal compilatore come una qualsiasi area di memoria, anche qui avremo un campo di livello 01 con il nome della videata, seguito dai vari campi di livello inferiore con le costanti ed i campi di I/O che avremo sullo schermo. Innanzitutto si deve definire la posizione del campo, cioè da quale riga e quale colonna inizia:
LINE IS numero-linea         

COLUMN IS numero-colonna

se il campo da visualizzare è una costante deve avere la clausola VALUE IS costante
se è invece una variabile di INPUT o OUTPUT è obbligatorio indicare la dimensione e il tipo:
PIC X(..) (alfanumerico)
PIC 9(..) (numerico)     

 

il campo da usare per l'input o l'output:

USING nomecampo

i campi possono avere delle proprietà di visualizzazione:

 

                                                         BACKGROUND-COLOR colore di sfondo

                                                         BELL emette un Bip
BLANK WHEN ZERO se il campo contiene il valore zero viene visualizzato vuoto
                                                         BLINK campo lampeggiante
                                                         FOREGROUND-COLOR colore di primo piano
                                                         HIGHLIGHT campo ad alta intensità luminosa
                                                         JUSTIFIED campo giustificato
                                                         LEFT-JUSTIFIED campo allineato a sinistra
                                                         LOWLIGHT campo a bassa intensità luminosa
                                                         REVERSE-VIDEO campo con inversione di sfondo
                                                         RIGHT-JUSTIFIED campo allineato a destra
                                                         SECURE il contenuto del campo è sostituito da asterischi (*)
                                                         UNDERLINE campo sottolineato

 

La visualizzazione dell'area si ottiene con il comando:  DISPLAY nomevideata.

L'attivazione dell'input dei dati si ottiene con il comando ACCEPT nomevideata.

 

Top


 

<p><a href="http://nicolamaggi.it">http://nicolamaggi.it</a> <a href="http://nicolamaggi.it/index.htm">http://nicolamaggi.it/index.htm</a> <a href="http://nicolamaggi.it/cobol.htm">http://nicolamaggi.it/cobol.htm</a> <a href="http://nicolamaggi.it/consigli.htm">http://nicolamaggi.it/consigli.htm</a> <a href="http://nicolamaggi.it/links.htm">http://nicolamaggi.it/links.htm</a> <a href="http://nicolamaggi.it/musica.htm">http://nicolamaggi.it/musica.htm</a></p>