MVSFORUMS.com A Community of and for MVS Professionals
View previous topic :: View next topic
Author
Message
yadav2005 Intermediate Joined: 10 Jan 2005 Posts: 348 Topics: 144
Posted: Fri Oct 16, 2009 2:12 pm Post subject:
Kolusu I found a problem while testing can you help me solve the problem.
My input file is having a record as below:
Code:
12.34567890-"," 1234.56789123
Can you help me understand why the value is becoming -12.45 instead of -12.34 and 1234.67 instead of 1234.56 and I am showing you my sysout and my code:
Code:
05 AMOUNT-DTL-EDITED PIC ----------9.99
VALUE ZEROES.
05 INP-FLD1 PIC X(20) VALUE SPACES.
05 WK-FLD1.
10 WK1-INTEGER PIC 9(10).
10 WK1-DECIMAL PIC 9(08).
05 NUM-FLD1 REDEFINES WK-FLD1 PIC S9(10)V9(08).
05 INP-FLD2 PIC X(20) VALUE SPACES.
05 WK-FLD2.
10 WK2-INTEGER PIC 9(10).
10 WK2-DECIMAL PIC 9(08).
05 NUM-FLD2 REDEFINES WK-FLD2 PIC S9(10)V9(08).
MOVE IN-REC(1:20) TO INP-FLD1
DISPLAY 'INP-FLD1 B:' INP-FLD1
INSPECT INP-FLD1(1:19) REPLACING ALL ' ' BY '0'
DISPLAY 'INP-FLD1 A:' INP-FLD1
INITIALIZE WK-FLD1
DISPLAY 'WK-FLD1 B:' WK-FLD1
DISPLAY 'WK1-INTEGER B:' WK1-INTEGER
DISPLAY 'WK1-DECIMAL B:' WK1-DECIMAL
UNSTRING INP-FLD1 DELIMITED BY '.'
INTO WK1-INTEGER, WK1-DECIMAL
DISPLAY 'WK-FLD1 A:' WK-FLD1
DISPLAY 'WK1-INTEGER A:' WK1-INTEGER
DISPLAY 'WK1-DECIMAL A:' WK1-DECIMAL
DISPLAY 'NUM-FLD1 B:' NUM-FLD1
IF INP-FLD1(20 : 1) = '-'
COMPUTE NUM-FLD1 = ( 0 - NUM-FLD1 )
END-IF
DISPLAY 'NUM-FLD1 A:' NUM-FLD1
MOVE NUM-FLD1 TO AMOUNT-DTL-EDITED
IF IN-REC(1:20) IS EQUAL TO SPACES
MOVE 0.00 TO AMOUNT-DTL-EDITED
END-IF
WRITE OUTFILE-REC FROM WS-DETAIL
MOVE IN-REC(21:20) TO INP-FLD2
DISPLAY 'INP-FLD2 B:' INP-FLD2
INSPECT INP-FLD2(1:19) REPLACING ALL ' ' BY '0'
DISPLAY 'INP-FLD2 A:' INP-FLD2
INITIALIZE WK-FLD2
DISPLAY 'WK-FLD2 B:' WK-FLD2
DISPLAY 'WK2-INTEGER B:' WK2-INTEGER
DISPLAY 'WK2-DECIMAL B:' WK2-DECIMAL
UNSTRING INP-FLD2 DELIMITED BY '.'
INTO WK2-INTEGER, WK2-DECIMAL
DISPLAY 'WK-FLD2 A:' WK-FLD2
DISPLAY 'WK2-INTEGER A:' WK2-INTEGER
DISPLAY 'WK2-DECIMAL A:' WK2-DECIMAL
DISPLAY 'NUM-FLD2 B:' NUM-FLD2
IF INP-FLD2(20 : 1) = '-'
COMPUTE NUM-FLD2 = ( 0 - NUM-FLD2 )
END-IF
DISPLAY 'NUM-FLD2 A:' NUM-FLD2
MOVE NUM-FLD2 TO AMOUNT-DTL-EDITED
IF IN-REC(21:20) IS EQUAL TO SPACES
MOVE 0.00 TO AMOUNT-DTL-EDITED
END-IF
WRITE OUTFILE-REC FROM WS-DETAIL
In my output file I am getting data as below:
Sysout:
Code:
INP-FLD1 B: 12.34567890-
INP-FLD1 A:0000000012.34567890-
WK-FLD1 B:000000000000000000
WK1-INTEGER B:0000000000
WK1-DECIMAL B:00000000
WK-FLD1 A:000000001245678900
WK1-INTEGER A:0000000012
WK1-DECIMAL A:45678900
NUM-FLD1 B:000000001245678900
NUM-FLD1 A:00000000124567890}
INP-FLD2 B: 1234.56789123
INP-FLD2 A:0000001234.56789123
WK-FLD2 B:000000000000000000
WK2-INTEGER B:0000000000
WK2-DECIMAL B:00000000
WK-FLD2 A:000000123467891230
WK2-INTEGER A:0000001234
WK2-DECIMAL A:67891230
NUM-FLD2 B:000000123467891230
NUM-FLD2 A:000000123467891230
I guess we are wrongly moving 1 byte data , can you please help me how to fix the probelem.
Back to top
kolusu Site Admin Joined: 26 Nov 2002 Posts: 12402 Topics: 75 Location: San Jose
Posted: Fri Oct 16, 2009 3:50 pm Post subject:
yadav2005,
*Sigh* if you looked closely at my code , I used unstring only on the first 19 bytes .
Kolusu
Back to top
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum