COBOL
REGOLE SINTATTICHE
Tutte le linee di comandi sono terminate da . e sono dette imperative.
Dicesi paragrafo l'insieme di una o piu' istruzioni che terminano con
un unico punto.
COLONNE
Un programma in COBOL deve rispettare alcune colonnature standard.
C margine A margine B
1<-->6 7 8<---->11 12<--->72
| | | |
| | | +--------- qui si digita il programma
| | +--------------------- intestazione division/section/nomi par.
| +--------------------------- se * la riga e' un commento
+--------------------------------- documentazione
Un programma e' suddiviso in DIVISION e SECTION:
IDENTIFICATION DIVISION. dichiarazioni generali del programma
PROGRAM-ID nome del programma
ENVIRONMENT DIVISION.
CONFIGURATION SECTION. definisce tipo di elaboratore
INPUT-OUTPUT SECTION. solo se il prog utilizza i file
FILE-CONTROL.
SELECT ... assegna nomi interni a file esterni
DATA DIVISION. definizione tipo e dimensione dei dati
FILE SECTION.
FD ... file description
WORKING-STORAGE SECTION. contiene le dichiarazioni delle variabili
contiene dati elementari(77) e composti(>=01)
VALUE ...
PICTURE ... A=alpha, 9=numerico, X=alphanum
PROCEDURE DIVISION.
MAIN SECTION.
MAIN EXIT.
NUMERI DI LIVELLO
I numeri di livello permetto di dichiarare le variabili che saranno
utilizzate nel programma.
Una variabile di tipo semplice o elementare viene indicata da 77, es:
77LATO PIC 9.
Soltanto i campi elementari hanno la clausola PICTURE.
Le variabili strutturate sono formate da una o piu' variabili elementari.
Il livello 01 viene riservato per la dichiarazione dei record.
01NOME-STUD.
03 COGNOME PIC X(15)
03 NOME PIC X(15)
03 CLASSE PIC X(5)
E' possibile associare nomi diversi ai valori che puo' assumere un campo.
77 GRADO PIC9(01)
88 PRIMO VALUE 1
88 SECONDO VALUE 2
88 TERZO VALUE 3
DICHIARAZIONE VARIABILI
PICTURE
Permette di definire la lunghezza di un campo e la sua classe.
PIC XXXXX. o PIC X(5). 5 caratteri alphanumerici
PIC 99. o PIC 9(2). 2 caratteri numerici
- VALUE
Associata alla PICTURE vi e' l'istruzione VALUE che permette una
inizializzazione di una variabile durante la fase dichiarativa.
PIC 9(3) VALUE 145.
- variabile con segno:
VALORE S PIC S9(06)
- variabile con virgola:
VALORE V PIC 9(03)V9(03)
- variabili zoned (numeriche)
per la variabile sono utilizzati tanti byte quanti indicati nella PICTURE.
01VAR1-ZONED PIC 9(6).
01VAR2-ZONED PIC S9(6) DISPLAY.
MOVE 19 TO VAR1-ZONED.
MOVE -1993 TO VAR2-ZONED.
- variabili packed (numeriche)
in ogni byte sono impaccati 3 digit piu' un nibble per il segno.
01VAR-PAC PIC 9(6) COMP-3.
- variabili binarie (numeriche)
il numero viene memorizzato in 2, 4 o 8 byte secondo il numero di cifre.
01VAR-BINPIC PIC 9(4) COMP.
Fino a 4 cifre utilizza 2 byte
da 5 a 9 " " 4 "
da 10 a 18 " " 8 "
- variabili floating-point
puo' essere in singola (COMP-1) o doppia precisione (COMP-2).
Se singola precisione utilizza 4 byte (1 esponente + 3 mantissa)
Se doppia precisione utilizza 8 byte (1 esponente + 7 mantissa)
TABELLE
Una tabella e' un array di tipi omogenei:
01TABELLA OCCURS 10 TIMES PIC 9(6).
01TABELLA OCCURS 10 TIMES.
03 CAMPO-1 PIC 9(2).
03 CAMPO-3 PIC X(4).
Per riferirsi alla variabile CAMPO-1 nel secondo elemento della tabella
e' sufficente usare:
CAMPO-1(2)
Volendo riferirsi all'intero secondo record della tabella:
TABELLA(2)
OPERAZIONI MATEMATICHE
COMPUTE
Esegue le operazioni matemetiche fondamentali (+, -, /, *):
COMPUTE campo-1 = VALORE * 2 + 10.
COMPUTE X = VALORE + VALORE.
OPERAZIONI ALGEBRICHE
Le operazioni matematiche sono utilizzabili con keyword indipendenti:
ADD op-1 op-2 ... op-n GIVING ris-1 ... ris-m
ADD op-1 op-2 ... op-n TO ris-1 ... ris-m
se VAR1 = 23 allora con
ADD VAR1 2 GIVING RIS1 RIS2.
RIS1 e RIS2 contengono 25
se VAR1 = 23 e RIS1 = 5 allora con
ADD VAR1 3 TO RIS1.
RIS1 contiene 31
In ugual modo vi sono:
SUBTRACT op-1 ... op-n FROM valore GIVING ris-1 ... ris-m
SUBTRACT op-1 ... op-n FROM valore TO ris-1 ... ris-m
MULTIPLY val-1 BY val-2 GIVING ris-1 ... ris-n
MULTIPLY val-1 BY ris-1 ... ris-n
DIVIDE val-1 INTO val-2 GIVING ris-1 REMAINDER campo-1
DIVIDE val-1 INTO ris-1 ... ris-n
I/O CON TERMINALE
ACCEPT
Attende da stdin un dato:
ACCEPT VALORE.
DISPLAY
Scrive a stdout il contenuto di una variabile:
DISPLAY VALORE.
TERMINAZIONE PROGRAMMA
STOP RUN
Termina l'esecuzione del programma.
Deve essercene almeno una.
ISTRUZIONI DI CONTROLLO
IF
IF condizione istruzione-1 [ ELSE istruzione-2 ].
Per es:
IF VARIABILE-A > VARIABILE-B
DISPLAY 'A maggiore di B'
ELSE
DISPLAY 'B maggiore di A'.
IF SCONTO NOT EQUAL ZERO
COMPUTE TOT = IMP + ( IMP * SCONTO / 100 )
DISPLAY TOT.
ALTRE ISTRUZIONI
MOVE
Trasferisce il contenuto di una variabile ad un altra.
MOVE campo-1 TO campo-2.
MOVE 12345 TO VALORE.
FILE I/O
DICHIARAZIONI
L' associazione dei files interni a quelli reali esterni viene effettuata
in ENVIRONMENT DIVISION, INPUT-OUTPUT SECTION,
paragrafo FILE-CONTROL
mediante la clausola SELECT.
Per ogni file gestito si deve scrivere un FD (File Description):
FILE SECTION.
FD nome-file
LABEL RECORD IS STANDARD
[BLOCK CONTAINS number RECORD].
01 nome-record PIC ..........
...oppure...
01 REC-ARTICOLO.
03 CODICE PIC X(10).
03 DESCRIZIONE PIC X(20).
03 GIACENZA PIC 9(5).
03 GIACENZA-MIN PIC 9(5).
03 QTA-ORD PIC 9(5).
ISTRUZIONI PER OPERAZIONI SUI FILE
Un file puo' essere aperto in input od in output.
Quando si legge un file si puo' far leggere i dati in una struttura che
ricalca quella dei record nella WORKING-STORAGE SECTION.
OPEN
OPEN INPUT nome-file1 [nome-file2] ...
OPEN OUTPUT nome-file1 [nome-file2] ...
OPEN INPUT nome-file1
OUTPUT nome-file2
CLOSE
CLOSE nome-file1 [nome-file2] ...
READ
READ nome-file [AT END istruzioni]
READ nome-file INTO nome-dato [AT END istruzioni]
WRITE
WRITE nome-record
WRITE nome-record FROM nome-dato
PRE-PROCESSING
COPY - INCLUDE DI ALTRI FILES
Mediante questo comando e' possibile includere altri files che
contengono per esempio definizioni comuni.
COPY filename
CHIAMATE DI PROGRAMMI
PERFORM
PERFORM nome-di-procedura
Esegue un paragrafo o una section.
Equivale alla call subroutine di molti linguaggi.
Al ritorno viene eseguita l'istruzione successiva.
CALL
L'istruzione call consente di chiamare un sotto-programma:
CALL nome-modulo
Il programma chiamato ritorna il controllo mediante l'istruzione GOBACK.
USER SECTION (SUBROUTINES)
E' possibile dichiarare una subroutine mediante le istruzioni:
SCONTO SECTION.
INIZIO-SCONTO.
COMPUTE TOT = IMP + ( IMP * SCONTO / 100 ).
FINE-SCONTO.
EXIT.