Page 1 of 3
how to convert string to number?
Posted:
Sat Mar 13, 2010 2:57 am
by helen2000
Hi All,
Does anybody know how to convert a string to number in Cobol? we have 3 var as following:
03 NUM0 PIC X(6).
03 NUM1 PIC 9(06).
03 NUM2 PIC 9(06) VALUE 9754.
........................
MOVE '9754' TO NUM0
MOVE NUM0 TO NUM1
IF NUM1 = NUM2
DISPLAY "SUCCESSFUL!"
ELSE
DISPLAY "CONVERSION FAIL!"
END-IF
DISPLAY 'NUM0=' NUM0
DISPLAY 'NUM1=' NUM1
DISPLAY 'NUM2= ' NUM2
I got the output as following:
CONVERSION FAIL!
NUM0=9754
NUM1=9754 0
NUM2= 009754
******************************* Bottom of Data *
why is num1 "9754 0", how to convert "9754" to number 9754, thank you very much!
helen
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 3:20 am
by dick scherrer
Hello,
MOVE '9754' TO NUM0 - this instruction caused NUM0 to contain
9754bb.
Suggest you use NUMVAL in this MOVE (MOVE NUM0 TO NUM1). Read here:
http://publibz.boulder.ibm.com/cgi-bin/ ... r50/7.1.32
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 3:22 am
by ITConsultant
Num0 is PIC X meaning alpha numeric.
Num1 & 2 are numeric.
you should read up the rules on moving alph numeric to numeric etc.
If you look at the output in HEX you will see the difference.
BOTTOM LINE - READ THE BOOK / MANUAL.
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 4:11 am
by helen2000
thank you, Mr. Dick and ITConsultant.
could you tell me how to check output in HEX? I'd like to know
why num1 is "9754b0" instead of "9754bb", thanks again,
NUM0=9754
NUM1=9754 0
NUM2= 009754
******************************* Bottom of Data *
helen
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 4:33 am
by dick scherrer
Hello,
Because of the way COBOL moves are serviced at run time. The system tried to do what it believed you wanted. Which is why we need to be quite aware of what we have asked the system to do.
One way to see values in HEX is to view the output file in tso/ispf and then use HEX ON.
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 4:34 am
by ITConsultant
Assuming you are on the mainframe & can see / access your job's sysout, just type HEX on the command line to switch to HEX mode. You can switch back by typing HEX OFF.
The "b" or space between 4 & 0 for NUM1 is probably not a space and is a low value. You can confirm it in HEX (HEX value for space would be 40 and F0 for 0. Low value in HEX is 00).
HEX mode displays three lines for every text / EBCDIC line. First line would be your text as you normally see it, next two lines are HEX. For example if in text you see HELEN2000, in HEX mode it will appear as following:
HELEN2000
CCDCDFFFF
8535520000
H = x'C8'
E = x'C5'
.... and so on.
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 9:54 am
by dick scherrer
Hello,
The "b" or space between 4 & 0 for NUM1 is probably not a space and is a low value.
Why would you believe this? As this is so little work to test, why not run a little experiment and be sure before posting
It took less than 5 minutes to copy/paste the code in question and run this. . .
CONVERSION FAIL!
CDDECDECDD4CCCD54
365559296506193A0
_________________
NUM0=9754
DEDF7FFFF44444444
5440E975400000000
_________________
NUM1=9754 0
DEDF7FFFF4F444444
5441E975400000000
_________________
NUM2= 009754
DEDF74FFFFFF44444
5442E000975400000
Note that the embedded space really is a space. . .
If you look at the output in HEX you will see the difference.
BOTTOM LINE - READ THE BOOK / MANUAL.
I believe you posted a good suggestion - one that you should follow before posting guesses as solutions (i.e. review the manual and verify the results).
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 10:46 am
by helen2000
anyway, I got a lots from both of you, thank you in advance.
but my question is:why num1 is "9754b0" instead of "9754bb"? as you said, the output produce is
at runtime, but I run the same program in different machine and move any num string "nnnn" to num0,
for num1 always got "nnnn 0" instead of "nnnnbb", I confuse here, thanks again.
helen
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 11:24 am
by dick scherrer
Hi Helen,
but my question is:why num1 is "9754b0" instead of "9754bb"?
Because num1 is defined as numeric - 9(06). As num0 is alphanumeric the x(06) value resulting from the first move is 9754bb.
but I run the same program in different machine and move any num string "nnnn" to num0,
for num1 always got "nnnn 0" instead of "nnnnbb"
Yes, this is the expected behavior.
Suggest you change the code to use 9(08) as the picture for num1 and run the code again as a demonstration.
If you have not included the NUMVAL in a test, suggest you do that too.
Re: how to convert string to number?
Posted:
Sat Mar 13, 2010 6:56 pm
by Robert Sample
IIRC, depending upon the compiler options, COBOL will enforce signs. Which means when you move a value to a numeric field, COBOL adds an Assembler OR instruction (actually an OI or OR Immediate) to force the last byte to be F?. Since a space is X'40' and a zero is X'F0', the output of the OR instruction is a zero. So you get 4 digits, a space, and a zero in the six-character field. This is normal, expected, and typical COBOL behavior.