[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]
[volume]
[parte]
Capitolo 469. Modello di definizione della variabile
Il COBOL gestisce soltanto due tipi di dati: numerici e alfanumerici. Tuttavia, nel momento in cui si dichiara il modello, le variabili scalari (ovvero quelle che non sono scomposte) si distinguono in classi e in categorie, secondo lo schema che si vede nella tabella successiva.
Tabella 469.1. Classi e categorie delle variabili COBOL.
|
Le variabili che appartengono alla classe numerica contengono dei valori che si possono utilizzare per eseguire delle espressioni numeriche; mentre quelle che appartengono alla classe alfanumerica si possono utilizzare soltanto come sequenze di caratteri.
Si osservi che una variabile strutturata è sempre solo alfanumerica, ma ciò non toglie che i campi che contiene possano essere di una classe e di una categoria differente.
|
Le variabili che appartengono alle categorie edited, «modificate», servono per ricevere un valore, numerico o alfanumerico, da modificare nell'atto stesso della ricezione. Una variabile di questo tipo fa sempre parte della classe alfanumerica, perché, una volta ricevuti i dati e modificati in base al modello di definizione della variabile, questi sono semplicemente una sequenza di caratteri senza più alcun valore numerico.
469.1
Dichiarazione del modello di definizione della variabile
Il modello di definizione della variabile è introdotto dalla parola chiave PICTURE, o PIC:
/ \
| PICTURE |
< ¯¯¯¯¯¯¯ > IS character-string
| PIC |
\ ¯¯¯ /
|
La metavariabile character-string costituisce il modello vero e proprio, che può essere composto da un massimo di 30 caratteri, anche se in questo modo si possono comunque rappresentare modelli di variabili di dimensioni molto più grandi.
Si osservi che l'indicazione di un modello di definizione della variabile è obbligatorio per tutte le variabili scalari (pertanto riguarda potenzialmente i livelli da 01 a 49 e 77), mentre non è consentito per le variabili strutturate.
La stringa che costituisce il modello di definizione della variabile è composta di simboli che descrivono ognuno le caratteristiche di un carattere, di una cifra, di un segno, oppure inseriscono qualcosa che nel dato originale è assente, ma spesso possono essere ripetuti mettendo un numero intero tra parentesi:
Una notazione del genere indica che il simbolo x va inteso come se fosse ripetuto n volte; per esempio, 9(3)V9(5) è equivalente a 999V99999. È attraverso questo meccanismo che si possono descrivere variabili molto grandi, pur avendo un modello di definizione limitato a soli 30 caratteri.
Nelle sezioni successive vengono descritti i simboli utilizzabili per i modelli di definizione delle variabili scalari. Lo standard del linguaggio COBOL annovera più possibilità di quelle indicate, ma i compilatori non si comportano sempre allo stesso modo e spesso ignorano l'uso di alcuni simboli, oppure li interpretano in modo inesatto. Questo problema riguarda soprattutto i simboli che applicano delle modifiche al valore ricevuto nella variabile, che quindi vanno usati con estrema parsimonia se si vuole scrivere un programma abbastanza compatibile.
|
469.2
Variabili alfanumeriche
Sono variabili alfanumeriche pure e semplici quelle che possono rappresentare qualunque carattere delle codifica prevista, limitatamente al fatto che la rappresentazione è in forma di byte (ASCII o EBCDIC). Il modello di definizione di una variabile alfanumerica prevede simboli speciali che limitano l'inserimento di soli caratteri alfabetici o di sole cifre numeriche, ma in pratica, succede spesso che i compilatori non applichino alcuna restrizione.
Tabella 469.3. Simboli del modello di definizione di una variabile alfanumerica.
Simbolo | Descrizione |
9
| Rappresenta una cifra numerica. |
A
| Rappresenta una lettera dell'alfabeto latino, non accentata, maiuscola o minuscola. |
X
| Rappresenta un carattere qualsiasi. |
|
Si osservi che il modello di definizione di una variabile alfanumerica deve contenere almeno un simbolo X o A, altrimenti, un modello che contenga soltanto il simbolo 9 verrebbe interpretato come numerico.
A titolo di esempio, viene mostrato un piccolo programma con tre variabili scalari alfanumeriche, aventi modelli diversi, abbinate ognuna a una variabile strutturata. Alle variabili scalari viene assegnato lo stesso valore, in modo da poter confrontare come questo valore viene inteso e rappresentato.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PICTURE-ALPHANUMERIC.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-02-23.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 DATA DIVISION.
000900*
001000 WORKING-STORAGE SECTION.
001100 01 RECORD-A.
001200 02 A PICTURE X(15) USAGE IS DISPLAY.
001300 01 RECORD-B.
001400 02 B PICTURE 9(5)A(5)X(5) USAGE IS DISPLAY.
001500 01 RECORD-C.
001600 02 C PICTURE A(5)X(5)9(5) USAGE IS DISPLAY.
001700*
001800 PROCEDURE DIVISION.
001900*
002000 MAIN.
002100 MOVE " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO A.
002200 MOVE " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO B.
002300 MOVE " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO C.
002400 DISPLAY "SOURCE VALUE IS: ", QUOTE,
002500 " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", QUOTE.
002600 DISPLAY "PICTURE: X(15) VALUE: ", QUOTE, A, QUOTE,
002700 " DATA: ", QUOTE, RECORD-A, QUOTE.
002800 DISPLAY "PICTURE: 9(5)A(5)X(5) VALUE: ", QUOTE, B, QUOTE,
002900 " DATA: ", QUOTE, RECORD-B, QUOTE.
003000 DISPLAY "PICTURE: A(5)X(5)9(5) VALUE: ", QUOTE, C, QUOTE,
003100 " DATA: ", QUOTE, RECORD-C, QUOTE.
003200*
|
|
Compilando il programma con TinyCOBOL, l'avvio dell'eseguibile che si ottiene genera il risultato seguente, dove si può vedere che l'uso dei simboli A e 9 non comporta alcuna differenza di funzionamento rispetto a X; tuttavia, un compilatore più sofisticato potrebbe segnalare qualche tipo di errore:
SOURCE VALUE IS: " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
PICTURE: X(15) VALUE: " 1234567890ABCD" DATA: " 1234567890ABCD"
PICTURE: 9(5)A(5)X(5) VALUE: " 1234567890ABCD" DATA: " 1234567890ABCD"
PICTURE: A(5)X(5)9(5) VALUE: " 1234567890ABCD" DATA: " 1234567890ABCD"
|
469.3
Variabili alfanumeriche modificate
Il modello di definizione di una variabile alfanumerica può contenere simboli che applicano una modifica al valore stesso. La modifica avviene nel momento in cui il valore viene ricevuto.
Tabella 469.6. Simboli del modello di definizione di una variabile alfanumerica che descrivono una modifica del valore ricevuto.
Simbolo | Descrizione |
B
| Richiede l'inserimento di uno spazio. |
0
| Richiede l'inserimento di uno zero. |
/
| Se il compilatore lo permette, inserisce una barra obliqua. |
,
| Se il compilatore lo permette, inserisce una virgola. Si osservi comunque che non può apparire la virgola come simbolo conclusivo del modello, perché in tal caso assumerebbe il significato di un delimitatore. |
| Teoricamente, ogni altro simbolo che non abbia un significato preciso per la realizzazione dei modelli di definizione delle variabili, dovrebbe essere aggiunto tale e quale; in pratica, molto dipende dalle caratteristiche del compilatore. |
|
A titolo di esempio, viene mostrato un piccolo programma con due variabili scalari alfanumeriche, aventi modelli diversi, abbinate ognuna a una variabile strutturata. Alle variabili scalari viene assegnato lo stesso valore, in modo da poter confrontare come questo viene inteso e rappresentato. Nell'esempio si tenta in particolare di inserire in un modello una barra obliqua e una virgola.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PICTURE-ALPHANUMERIC-EDITED.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-02-23.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 DATA DIVISION.
000900*
001000 WORKING-STORAGE SECTION.
001100 01 RECORD-A.
001200 02 A PICTURE X(15) USAGE IS DISPLAY.
001300 01 RECORD-B.
001400 02 B PICTURE ABX09,/X(8) USAGE IS DISPLAY.
001500*
001600 PROCEDURE DIVISION.
001700*
001800 MAIN.
001900 MOVE "ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO A.
002000 MOVE "ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO B.
002100 DISPLAY "SOURCE VALUE IS: ", QUOTE,
002200 "ABCDEFGHIJKLMNOPQRSTUVWXYZ", QUOTE.
002300 DISPLAY "PICTURE: X(15) VALUE: ", QUOTE, A, QUOTE,
002400 " DATA: ", QUOTE, RECORD-A, QUOTE.
002500 DISPLAY "PICTURE: ABX09,/X(8) VALUE: ", QUOTE, B, QUOTE,
002600 " DATA: ", QUOTE, RECORD-B, QUOTE.
002700*
|
|
Compilando il programma con TinyCOBOL, l'avvio dell'eseguibile che si ottiene genera il risultato seguente:
SOURCE VALUE IS: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
PICTURE: X(15) VALUE: "ABCDEFGHIJKLMNO" DATA: "ABCDEFGHIJKLMNO"
PICTURE: ABX09,/X(8) VALUE: "A B0C,/DEFGHIJK" DATA: "A B0C,/DEFGHIJK"
|
469.4
Variabili numeriche
Le variabili numeriche pure e semplici, sono quelle il cui valore può essere usato per calcolare delle espressioni numeriche. Nel modello di definizione di una variabile di questo tipo, possono apparire solo simboli che descrivono la dimensione del valore rappresentabile, distinguendo la parte intera da quella decimale e specificando eventualmente la presenza del segno.
Tabella 469.9. Simboli del modello di definizione di una variabile numerica.
Simbolo | Descrizione |
9
| Rappresenta una cifra numerica singola. |
V
| Rappresenta la separazione tra la parte intera e la parte decimale del numero e di conseguenza può apparire una sola volta nel modello. Questo simbolo non incrementa la dimensione della variabile, in quanto serve solo a sapere dove si intende che debba trovarsi la separazione tra la parte intera e quella decimale, ai fini dei calcoli che si possono eseguire. Se questo simbolo appare alla fine del modello, è come se non fosse inserito, perché la sua presenza non aggiunge alcuna informazione. |
S
| Se si utilizza questo simbolo, può essere collocato soltanto all'estrema sinistra del modello, allo scopo di specificare che il numero è provvisto di segno. A seconda del modo in cui l'informazione numerica viene codificata nella variabile (DISPLAY, COMPUTATIONAL e altre opzioni eventuali), il segno può occupare una posizione separata oppure no. |
P
| Il simbolo P può essere usato soltanto alla sinistra o alla destra del modello e può apparire ripetuto, tenendo conto che se appare alla sinistra è incompatibile con il simbolo V. Questo simbolo non incrementa la dimensione della variabile, ma serve a far sì che il valore contenuto nella variabile sia interpretato in modo differente. L'uso di questo simbolo è sconsigliabile, perché altera il comportamento della variabile in un modo che non è facile da interpretare correttamente. |
|
A titolo di esempio, viene mostrato un piccolo programma con cinque variabili scalari numeriche, aventi modelli diversi, abbinate ognuna a una variabile strutturata. Alle variabili scalari viene assegnato lo stesso valore, in modo da poter confrontare come questo valore viene inteso e rappresentato. Nell'esempio appare anche l'uso del simbolo P a dimostrazione della difficoltà che questo comporta nell'interpretare l'esito degli assegnamenti alle variabili.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PICTURE-NUMERIC.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-02-22.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 DATA DIVISION.
000900*
001000 WORKING-STORAGE SECTION.
001100 01 RECORD-A.
001200 02 A PICTURE 99999 USAGE IS DISPLAY.
001300 01 RECORD-B.
001400 02 B PICTURE 999V99 USAGE IS DISPLAY.
001500 01 RECORD-C.
001600 02 C PICTURE S999V99 USAGE IS DISPLAY.
001700 01 RECORD-D.
001800 02 D PICTURE 999V99PP USAGE IS DISPLAY.
001900 01 RECORD-E.
002000 02 E PICTURE PP99999 USAGE IS DISPLAY.
002100*
002200 PROCEDURE DIVISION.
002300*
002400 MAIN.
002500 MOVE -1234.5678 TO A.
002600 MOVE -1234.5678 TO B.
002700 MOVE -1234.5678 TO C.
002800 MOVE -1234.5678 TO D.
002900 MOVE -1234.5678 TO E.
003000 DISPLAY "SOURCE VALUE IS -1234.5678".
003100 DISPLAY "PICTURE: 99999 VALUE: ", A,
003200 " DATA: ", RECORD-A.
003300 DISPLAY "PICTURE: 999V99 VALUE: ", B,
003400 " DATA: ", RECORD-B.
003500 DISPLAY "PICTURE: S999V99 VALUE: ", C,
003600 " DATA: ", RECORD-C.
003700 DISPLAY "PICTURE: 999V99PP VALUE: ", D,
003800 " DATA: ", RECORD-D.
003900 DISPLAY "PICTURE: PP99999 VALUE: ", E,
004000 " DATA: ", RECORD-E.
004100 STOP RUN.
004200*
|
|
Compilando il programma con TinyCOBOL, l'avvio dell'eseguibile che si ottiene genera il risultato seguente:
SOURCE VALUE IS -1234.5678
PICTURE: 99999 VALUE: 01234 DATA: 01234
PICTURE: 999V99 VALUE: 234.56 DATA: 23456
PICTURE: S999V99 VALUE: -234.56 DATA: 2345O
PICTURE: 999V99PP VALUE: 004.5678 DATA: 45678
PICTURE: PP99999 VALUE: .0078000 DATA: 78000
|
Facendo la stessa cosa con OpenCOBOL:
SOURCE VALUE IS -1234.5678
PICTURE: 99999 VALUE: 01234 DATA: 01234
PICTURE: 999V99 VALUE: 234.56 DATA: 23456
PICTURE: S999V99 VALUE: -234.56 DATA: 2345v
PICTURE: 999V99PP VALUE: 004.5678 DATA: 45678
PICTURE: PP99999 VALUE: .0078000 DATA: 78000
|
Si osservi che nell'esempio le variabili scalari numeriche sono state dichiarate con l'opzione USAGE IS DISPLAY, che comunque sarebbe stata implicita, in modo da assicurare la visibilità del contenuto leggendo il livello 01.
469.5
Variabili numeriche modificate
Il modello di definizione di una variabile fatta per ricevere un valore numerico, può contenere simboli che applicano una modifica all'apparenza del valore. Nel momento in cui una variabile del genere riceve un valore, ciò che la variabile fornisce è un'informazione alfanumerica, che non può più essere usata per elaborazioni matematiche; al massimo, una variabile del genere può ricevere il risultato di un'espressione che generi un valore numerico.
Tabella 469.13. Alcuni simboli del modello di definizione di una variabile numerica che descrivono una trasformazione in formato alfanumerico.
Simbolo | Descrizione |
B
| Richiede l'inserimento di uno spazio. |
0
| Richiede l'inserimento di uno zero. |
Z
| Si usa soltanto nella parte sinistra del modello e richiede di indicare uno spazio al posto di una cifra zero. |
*
| Si usa soltanto nella parte sinistra del modello e richiede di indicare un asterisco al posto di una cifra zero. |
,
| In condizioni normali inserisce una virgola letterale. Si osservi che non può apparire la virgola come simbolo conclusivo del modello, perché in tal caso assumerebbe il valore di un delimitatore. |
.
| In condizioni normali rappresenta il punto di separazione tra la parte intera e la parte decimale. Si osservi che in un modello che prevede la modifica, non si può usare il simbolo V. |
+
-
| Il segno + o il segno - indicano la posizione in cui si vuole appaia il segno del numero; se il segno viene ripetuto, le occorrenze successive alla prima rappresentano implicitamente la posizione di una cifra numerica, con soppressione degli zeri anteriori. Usando il segno - si dovrebbe ottenere la rappresentazione di un numero senza segno, quando questo ha un valore positivo. |
CR
DB
| Questi simboli, che occupano due caratteri, vengono inseriti tali e quali nella rappresentazione della variabile. Sono utili queste sigle per la contabilità dei paesi di lingua inglese (credit, debit); a ogni modo è bene ricordare che non sono influenzate dal segno del valore numerico che viene ricevuto nella variabile. |
$
| Si usa per mostrare il simbolo del dollaro, quando la valuta prevista nel sorgente del programma è quella predefinita. |
/
| Se il compilatore lo permette, inserisce una barra obliqua. |
| Teoricamente, ogni altro simbolo che non abbia un significato preciso per la realizzazione dei modelli di definizione delle variabili, dovrebbe essere aggiunto tale e quale; in pratica, molto dipende dalle caratteristiche del compilatore. |
|
Come esempio viene mostrato un piccolo programma con alcune variabili scalari numeriche modificate (edited), aventi modelli diversi, abbinate ognuna a una variabile strutturata. Alle variabili scalari viene assegnato lo stesso valore, in modo da poter confrontare come questo valore viene inteso e rappresentato.
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PICTURE-NUMERIC-EDITED.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-02-25.
000500*
000600 ENVIRONMENT DIVISION.
000700*
000800 DATA DIVISION.
000900*
001000 WORKING-STORAGE SECTION.
001100 01 RECORD-A.
001200 02 A PICTURE S9(10)V9(5) USAGE IS DISPLAY.
001300 01 RECORD-B.
001400 02 B PICTURE +Z(9)9.9(5) USAGE IS DISPLAY.
001500 01 RECORD-C.
001600 02 C PICTURE CR+Z(7)9.9(5) USAGE IS DISPLAY.
001700 01 RECORD-D.
001800 02 D PICTURE +Z(7)9.9(5)DB USAGE IS DISPLAY.
001900 01 RECORD-E.
002000 02 E PICTURE *(9)9.9(5)+ USAGE IS DISPLAY.
002100 01 RECORD-F.
002200 02 F PICTURE +*(9)9.9(4)$ USAGE IS DISPLAY.
002300 01 RECORD-G.
002400 02 G PICTURE +*(9)9,9(4)$ USAGE IS DISPLAY.
002500 01 RECORD-H.
002600 02 H PICTURE -(10)9,9(4)$ USAGE IS DISPLAY.
002700 01 RECORD-I.
002800 02 I PICTURE +(10)9,9(4)$ USAGE IS DISPLAY.
002900*
003000 PROCEDURE DIVISION.
003100*
003200 MAIN.
003300 MOVE +123456.789 TO A.
003400 MOVE +123456.789 TO B.
003500 MOVE +123456.789 TO C.
003600 MOVE +123456.789 TO D.
003700 MOVE +123456.789 TO E.
003800 MOVE +123456.789 TO F.
003900 MOVE +123456.789 TO G.
004000 MOVE +123456.789 TO H.
004100 MOVE +123456.789 TO I.
004200 DISPLAY "SOURCE VALUE IS: +123456.789".
004300 DISPLAY "PICTURE: S9(10)V9(5) VALUE: ", A,
004400 " DATA: ", RECORD-A.
004500 DISPLAY "PICTURE: +Z(9)9.9(5) VALUE: ", B,
004600 " DATA: ", RECORD-B.
004700 DISPLAY "PICTURE: CR+Z(7)9.9(5) VALUE: ", C,
004800 " DATA: ", RECORD-C.
004900 DISPLAY "PICTURE: +Z(7)9.9(5)DB VALUE: ", D,
005000 " DATA: ", RECORD-D.
005100 DISPLAY "PICTURE: *(9)9.9(5)+ VALUE: ", E,
005200 " DATA: ", RECORD-E.
005300 DISPLAY "PICTURE: +*(9)9.9(4)$ VALUE: ", F,
005400 " DATA: ", RECORD-F.
005500 DISPLAY "PICTURE: +*(9)9,9(4)$ VALUE: ", G,
005600 " DATA: ", RECORD-G.
005700 DISPLAY "PICTURE: -(10)9,9(4)$ VALUE: ", H,
005800 " DATA: ", RECORD-H.
005900 DISPLAY "PICTURE: +(10)9,9(4)$ VALUE: ", I,
006000 " DATA: ", RECORD-I.
006100 STOP RUN.
006200*
|
|
Compilando il programma con TinyCOBOL, l'avvio dell'eseguibile che si ottiene genera il risultato seguente:
SOURCE VALUE IS: +123456.789
PICTURE: S9(10)V9(5) VALUE: 0000123456.78900 DATA: 00001234567890{
PICTURE: +Z(9)9.9(5) VALUE: + 123456.78900 DATA: + 123456.78900
PICTURE: CR+Z(7)9.9(5) VALUE: CR+ 123456.78900 DATA: CR+ 123456.78900
PICTURE: +Z(7)9.9(5)DB VALUE: + 123456.78900DB DATA: + 123456.78900DB
PICTURE: *(9)9.9(5)+ VALUE: ****123456.78900+ DATA: ****123456.78900+
PICTURE: +*(9)9.9(4)$ VALUE: +****123456.7890$ DATA: +****123456.7890$
PICTURE: +*(9)9,9(4)$ VALUE: +********12,3456$ DATA: +********12,3456$
PICTURE: -(10)9,9(4)$ VALUE: 12,3456$ DATA: 12,3456$
PICTURE: +(10)9,9(4)$ VALUE: +12,3456$ DATA: +12,3456$
|
Tra i vari risultati, si può osservare che la virgola è stata interpretata come un segno senza un ruolo preciso, pertanto si colloca semplicemente prima delle ultime quattro cifre, secondo la previsione del modello.
Intervenendo nella sezione CONFIGURATION SECTION è possibile invertire il ruolo del punto e della virgola, nella rappresentazione dei numeri; nello stesso modo, è possibile attribuire un simbolo differente per la valuta. L'esempio seguente è una variante di quello appena mostrato, con le modifiche necessarie per questo scopo. Si osservi che come simbolo di valuta è stata scelta la lettera «E».
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. PICTURE-NUMERIC-EDITED-BIS.
000300 AUTHOR. DANIELE GIACOMINI.
000400 DATE-WRITTEN. 2005-02-25.
000500*
000600 ENVIRONMENT DIVISION.
000700 CONFIGURATION SECTION.
000800 SPECIAL-NAMES. DECIMAL-POINT IS COMMA
000900 CURRENCY SIGN IS "E".
001000*
001100 DATA DIVISION.
001200*
001300 WORKING-STORAGE SECTION.
001400 01 RECORD-A.
001500 02 A PICTURE S9(10)V9(5) USAGE IS DISPLAY.
001600 01 RECORD-B.
001700 02 B PICTURE +Z(9)9.9(5) USAGE IS DISPLAY.
001800 01 RECORD-C.
001900 02 C PICTURE CR+Z(7)9.9(5) USAGE IS DISPLAY.
002000 01 RECORD-D.
002100 02 D PICTURE +Z(7)9.9(5)DB USAGE IS DISPLAY.
002200 01 RECORD-E.
002300 02 E PICTURE *(9)9.9(5)+ USAGE IS DISPLAY.
002400 01 RECORD-F.
002500 02 F PICTURE +*(9)9.9(4)E USAGE IS DISPLAY.
002600 01 RECORD-G.
002700 02 G PICTURE +*(9)9,9(4)E USAGE IS DISPLAY.
002800 01 RECORD-H.
002900 02 H PICTURE -(10)9,9(4)E USAGE IS DISPLAY.
003000 01 RECORD-I.
003100 02 I PICTURE +(10)9,9(4)E USAGE IS DISPLAY.
003200*
003300 PROCEDURE DIVISION.
003400*
003500 MAIN.
003600 MOVE +123456,789 TO A.
003700 MOVE +123456,789 TO B.
003800 MOVE +123456,789 TO C.
003900 MOVE +123456,789 TO D.
004000 MOVE +123456,789 TO E.
004100 MOVE +123456,789 TO F.
004200 MOVE +123456,789 TO G.
004300 MOVE +123456,789 TO H.
004400 MOVE +123456,789 TO I.
004500 DISPLAY "SOURCE VALUE IS: +123456.789".
004600 DISPLAY "PICTURE: S9(10)V9(5) VALUE: ", A,
004700 " DATA: ", RECORD-A.
004800 DISPLAY "PICTURE: +Z(9)9.9(5) VALUE: ", B,
004900 " DATA: ", RECORD-B.
005000 DISPLAY "PICTURE: CR+Z(7)9.9(5) VALUE: ", C,
005100 " DATA: ", RECORD-C.
005200 DISPLAY "PICTURE: +Z(7)9.9(5)DB VALUE: ", D,
005300 " DATA: ", RECORD-D.
005400 DISPLAY "PICTURE: *(9)9.9(5)+ VALUE: ", E,
005500 " DATA: ", RECORD-E.
005600 DISPLAY "PICTURE: +*(9)9.9(4)E VALUE: ", F,
005700 " DATA: ", RECORD-F.
005800 DISPLAY "PICTURE: +*(9)9,9(4)E VALUE: ", G,
005900 " DATA: ", RECORD-G.
006000 DISPLAY "PICTURE: -(10)9,9(4)E VALUE: ", H,
006100 " DATA: ", RECORD-H.
006200 DISPLAY "PICTURE: +(10)9,9(4)E VALUE: ", I,
006300 " DATA: ", RECORD-I.
006400 STOP RUN.
006500*
|
|
Compilando il programma con TinyCOBOL, l'avvio dell'eseguibile che si ottiene genera il risultato seguente:
SOURCE VALUE IS: +123456.789
PICTURE: S9(10)V9(5) VALUE: 0000123456,78900 DATA: 00001234567890{
PICTURE: +Z(9)9.9(5) VALUE: + 1.23456 DATA: + 1.23456
PICTURE: CR+Z(7)9.9(5) VALUE: CR+ 1.23456 DATA: CR+ 1.23456
PICTURE: +Z(7)9.9(5)DB VALUE: + 1.23456DB DATA: + 1.23456DB
PICTURE: *(9)9.9(5)+ VALUE: *********1.23456+ DATA: *********1.23456+
PICTURE: +*(9)9.9(4)E VALUE: +********12.3456E DATA: +********12.3456E
PICTURE: +*(9)9,9(4)E VALUE: +****123456,7890E DATA: +****123456,7890E
PICTURE: -(10)9,9(4)E VALUE: 123456,7890E DATA: 123456,7890E
PICTURE: +(10)9,9(4)E VALUE: +123456,7890E DATA: +123456,7890E
|
Questa volta si può osservare che nel modello è il punto che perde il suo significato, apparendo nel risultato soltanto nella posizione prevista, allineando le cifre numeriche originali alla destra.
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome modello_di_definizione_della_variabile.htm
[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]