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

Code: Select all

418.1 to be 418.10
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