Discussione:
Problema strano in programma cobol
(troppo vecchio per rispondere)
MBulu
2005-03-29 10:05:03 UTC
Permalink
Ciao a tutti,
premetto che uso il cobol da 3 o 4 mesi dopo anni di RPG.
Ho un programma in cui, per errore, viene fatta una move da un campo
alfanumerico di 3 bytes ad un campo numerico di 3 bytes. Normalmente quando
faccio qualcosa del genere i programmi durante la loro esecuzione mi si
interrompono con un MCH1202. In questo caso invece l'operazione viene
eseguita convertendo le lettere in numeri: HHR diventa 889.
Sapevo che in RPG potevi compilare un programma dicendogli di ignorare gli
errori dei dati decimali, ma ho guardato l'istruzione che viene usata per
compilare il programma e non ha niente del genere.

Qialcuno sa come mai invece di darmi l'errore MCH1202 il campo viene
"convertito"?

P.S. l'istruzione di compilazione che usiamo, lanciata da STRPDM, è la
seguente:
SBMJOB CMD(CRTCBLMOD MODULE(&L/&N) SRCFILE(&L/QCBLSRC) SRCMBR(&N)
GENLVL(19) OPTION(*NOGEN *NOMONOPRC *NORANGE))


Grazie, Mario

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Roberto Nenni
2005-03-29 10:14:02 UTC
Permalink
Post by MBulu
Ciao a tutti,
premetto che uso il cobol da 3 o 4 mesi dopo anni di RPG.
Ho un programma in cui, per errore, viene fatta una move da un campo
alfanumerico di 3 bytes ad un campo numerico di 3 bytes. Normalmente quando
faccio qualcosa del genere i programmi durante la loro esecuzione mi si
interrompono con un MCH1202. In questo caso invece l'operazione viene
eseguita convertendo le lettere in numeri: HHR diventa 889.
Sapevo che in RPG potevi compilare un programma dicendogli di ignorare gli
errori dei dati decimali, ma ho guardato l'istruzione che viene usata per
compilare il programma e non ha niente del genere.
Qialcuno sa come mai invece di darmi l'errore MCH1202 il campo viene
"convertito"?
Non dovrebbe dipendere da cobol, ma da come il sistema tratta i bytes e dal
fatto che per lui i numeri in memoria sono packed, quindi lui usa solo il
digit del carattere.
Ora essendo in EBCDIC la lettera H=hex C8 e R=hex D9 il risultato è chiaro.
L'errore dati decimali si verifica quando il digit NON è un numero, ad
esempio se tu muovessi '$$$', in quanto $=hex 5B.
Questo funzionamento è lo stesso anche in RPG

Spero di essere stato chiaro.

Ciao
Roberto NENNI
MBulu
2005-03-29 10:26:50 UTC
Permalink
Post by Roberto Nenni
Non dovrebbe dipendere da cobol, ma da come il sistema tratta i bytes e dal
fatto che per lui i numeri in memoria sono packed, quindi lui usa solo il
digit del carattere.
Ora essendo in EBCDIC la lettera H=hex C8 e R=hex D9 il risultato è chiaro.
L'errore dati decimali si verifica quando il digit NON è un numero, ad
esempio se tu muovessi '$$$', in quanto $=hex 5B.
Questo funzionamento è lo stesso anche in RPG
Spero di essere stato chiaro.
chiaro, veloce e preciso. Grazie ancora, Mario

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Paolo Fiore
2005-03-29 10:51:19 UTC
Permalink
Post by Roberto Nenni
Ora essendo in EBCDIC la lettera H=hex C8 e R=hex D9 il risultato è chiaro.
L'errore dati decimali si verifica quando il digit NON è un numero, ad
esempio se tu muovessi '$$$', in quanto $=hex 5B.
Di RPG nonn so nulla, ma mi ci gioco una palla che non può trattarsi di una
sola MOVE. E' vero ciò che dici sulla rappresentazione in memoria, ma fai
una MOVE di roba alfabetica in un numero e becchi un errore sacrosanto,
sempre.

(...)
probabilmente il comportamento in questo caso dipende dalla working storage

01 pippo PIC XXX
01 pluto PIC 999 comp-3

01 pape.
05 pape_alpha pic xxx
05 pape_num redefines pape_alpha pic 9(5) comp-3

MOVE "abc" TO PIPPO
MOVE "abc" TO PAPE_ALPHA
* errore, non sono neppure sicuro che compili
MOVE PIPPO TO PLUTO
* con un po' di culo funziona (nota che manca la move)
DISPLAY pape_num

spero si capisca
non sono proprio certo possa funzionare alla prima; ma mi sento confident
che si tratti di una ridefinizione di qualche tipo
Roberto Nenni
2005-03-29 11:15:18 UTC
Permalink
Post by Paolo Fiore
Post by Roberto Nenni
Ora essendo in EBCDIC la lettera H=hex C8 e R=hex D9 il risultato è chiaro.
L'errore dati decimali si verifica quando il digit NON è un numero, ad
esempio se tu muovessi '$$$', in quanto $=hex 5B.
Di RPG nonn so nulla, ma mi ci gioco una palla che non può trattarsi di una
sola MOVE. E' vero ciò che dici sulla rappresentazione in memoria, ma fai
una MOVE di roba alfabetica in un numero e becchi un errore sacrosanto,
sempre.
ti confermo che in RPG il funzionamento delle move è sicuramente come ho
scritto e da ciò che dice Mario sembrerebbe uguale anche in Cobol, anche se
qui rimando la palla in quanto non ho mai compilato in Cobol su AS.

attento a quello che ti giochi, le sviste sono sempre in agguato...

Ciao
Roberto
Paolo Fiore
2005-03-29 11:26:44 UTC
Permalink
Post by Roberto Nenni
attento a quello che ti giochi, le sviste sono sempre in agguato...
sono anni che non ci metto le mani, ma prima cobolavo parecchio e mi sento
tranquillo! Ah, per un errore di sistema la pagina non è stata caricata
correttamete... la palla è ovviamente di Obelix che ormai ha abbondantemente
dato!!!!

Continua a leggere su narkive:
Loading...