Page 1 of 1
formatting a numeric field in input file
Posted: Fri Sep 02, 2016 12:17 am
by BANUREKHAB
Hi,
we get a input file from a different appilcation in the below format, X(18 byte
-131.1
290.05
265.07
251.52
252.37
281.78
304.78
421.37
418.1
354.66
361.05
254.33
277.33
68.64
125
My requirement is to convert this in to s9(16)v9(2) format. Is this possible. Please help.
Posted: Fri Sep 02, 2016 7:36 am
by magesh_j
Assuming LRECL=80, use the below code
Code: Select all
OPTION COPY
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'-'),
PARSE=(%00=(ENDBEFR=C'.',ENDBEFR=C' ',FIXLEN=16,PAIR=QUOTE),
%01=(FIXLEN=2)),
BUILD=(%00,UFF,ZD,LENGTH=16,
%01,81:C'-')),
IFTHEN=(WHEN=NONE,
PARSE=(%02=(ENDBEFR=C'.',ENDBEFR=C' ',FIXLEN=16,PAIR=QUOTE),
%03=(FIXLEN=2)),
BUILD=(%02,UFF,ZD,LENGTH=16,
%03,81:C' '))
OUTREC IFTHEN=(WHEN=(17,2,CH,EQ,C' '),OVERLAY=(17:C'00'),HIT=NEXT),
IFTHEN=(WHEN=(18,1,CH,EQ,C' '),OVERLAY=(18:C'0'),HIT=NEXT),
IFTHEN=(WHEN=(81,1,CH,EQ,C'-'),
OVERLAY=(1,18,ZD,MUL,-1,ZD,LENGTH=18)),
IFOUTLEN=80
Thanks
Magesh
Posted: Sat Sep 03, 2016 5:39 am
by magesh_j
BANUREKHAB,
Also let us know if you need
Code: Select all
418.1 to be 418.10
or
418.1 to be 418.01
I assumed to be
Regards,
Magesh
Posted: Mon Sep 05, 2016 10:22 am
by William Collins
For reversing the sign of a value, subtracting from zero is more efficient than multiply by minus one.
Posted: Mon Sep 05, 2016 7:38 pm
by magesh_j
Also we can move the values and decimal and symbol seperately in 81:%00,%01,c'+1'
IFThen=(when=(1,16,ss,eq,c'-'),overlay=(99:c'-'))
Then read 81,19,sff,zd,length=18 will make more easy.
We haven't got anything from op. Left as is.
Thanks
Magesh
Posted: Tue Sep 06, 2016 8:48 pm
by BANUREKHAB
Thank you very much and very sorry for the late reply. This is exactly what i needed.
My input file,
100402.24
1006961.9
103761.05
-100.31
170855.35
183
-159711.81
155213.69
152236.93
161383.16
After using the sort provided,
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=(1,1,CH,EQ,C'-'),
PARSE=(%00=(ENDBEFR=C'.',ENDBEFR=C' ',FIXLEN=16,PAIR=QUOTE),
%01=(FIXLEN=2)),
BUILD=(%00,UFF,ZD,LENGTH=16,%01,81:C'-')),
IFTHEN=(WHEN=NONE,
PARSE=(%02=(ENDBEFR=C'.',ENDBEFR=C' ',FIXLEN=16,PAIR=QUOTE),
%03=(FIXLEN=2)),
BUILD=(%02,UFF,ZD,LENGTH=16,%03,81:C' '))
OUTREC IFTHEN=(WHEN=(17,2,CH,EQ,C' '),OVERLAY=(17:C'00'),HIT=NEXT),
IFTHEN=(WHEN=(18,1,CH,EQ,C' '),OVERLAY=(18:C'0'),HIT=NEXT),
IFTHEN=(WHEN=(81,1,CH,EQ,C'-'),
OVERLAY=(1,18,ZD,SUB,-0,ZD,LENGTH=18 )),
IFOUTLEN=400
Output:
000000000010040224
000000000100696190
000000000010376105
00000000000001003J
000000000017085535
000000000000018300
00000000001597118J
000000000015521369
000000000015223693
000000000016138316
Thank you again. I will modify it for subtract from zero instead of multiplying by -1.
Posted: Tue Sep 06, 2016 9:22 pm
by magesh_j
BANUREKHAB,
Start using code tags. which will help people to read it better.
Code: Select all
[ code ] ur code [ / code ]
Regards,
Magesh
Posted: Tue Sep 06, 2016 9:22 pm
by magesh_j
BANUREKHAB,
Start using code tags. which will help people to read it better.
Code: Select all
[ code ] ur code [ / code ]
Regards,
Magesh