Focal Point
Convert Comma Delimited Numeric String to Quoted Zero Padded Character String

This topic can be found at:
https://forums.informationbuilders.com/eve/forums/a/tpc/f/7971057331/m/7611025152

October 12, 2007, 11:09 AM
SauPa
Convert Comma Delimited Numeric String to Quoted Zero Padded Character String
Input :-- &IPSTR='123,678,12,9,9999';
DESIRED OUTPUT :- &IPSTR='''0123','0678','0012','0009','9999''';
I have a fair idea of Code, but I am missing something or Misusing something...
Can anyone help ?

Specific Problem ::- Function ATODBL below, does not seem to be printing a Number but continues to display a Character....


Here is my Code :-
==========================================================================
-SET &IPSTR='123,678,12,9,9999';
-SET &OPSTR=' ';
-SET &DSP = ' Displayed String : ';


-SET &I=1;
-SET &TOK = '1';
-* Get Tokens in a loop
-REPEAT :GETTOKENS WHILE &TOK NE ' ';
-* obtain the first token
-SET &TOK = GETTOK(&IPSTR,&IPSTR.LENGTH,&I,',',4,'A4');
-SET &DBLTOK = ATODBL(&TOK,4,'D4');
-SET &TOK = STRIP(4,&TOK,' ',&TOK);
-SET &FMTTOK = EDIT(&DBLTOK,'''9999''');
-IF &TOK = ' ' THEN GOTO :GETTOKENS;
-TYPE &I ||':' || &TOK || ' Len:' || &TOK.LENGTH || 'DBLTOK:' || &DBLTOK
-SET &OPSTR= &OPSTR |',' |&FMTTOK;
-SET &I = &I + 1;
-:GETTOKENS

-TYPE 'ALL DONE';
-TYPE &OPSTR;
==========================================================================


Saurabh Palkar
October 12, 2007, 11:27 AM
Tom Flynn
Easy Way, others will follow:

-SET &IPSTR='123,678,12,9,9999';
-SET &OPSTR=' ';
-SET &DSP = ' Displayed String : ';
-SET &ECHO=ALL;

-SET &I=1;
-SET &TOK = '1';
-* Get Tokens in a loop
-REPEAT :GETTOKENS WHILE &TOK NE ' ';
-* obtain the first token
-SET &TOK = GETTOK(&IPSTR,&IPSTR.LENGTH,&I,',',4,'A4');
-SET &DBLTOK = ATODBL(&TOK,4,'D4');
-SET &TOK = STRIP(4,&TOK,' ',&TOK);


-SET &FMTOK_CK = IF EDIT(&TOK,'$999') EQ ' ' THEN '000' || &TOK ELSE
- IF EDIT(&TOK,'$$99') EQ ' ' THEN '00' || &TOK ELSE
- IF EDIT(&TOK,'$$$9') EQ ' ' THEN '0' || &TOK ELSE
- &TOK;
-TYPE &FMTOK_CK

-SET &FMTTOK = EDIT(&DBLTOK,'''9999''');

-IF &TOK = ' ' THEN GOTO :GETTOKENS;
-TYPE &I ||':' || &TOK || ' Len:' || &TOK.LENGTH || 'DBLTOK:' || &DBLTOK
-SET &OPSTR= &OPSTR |',' | &FMTOK_CK;
-SET &I = &I + 1;
-:GETTOKENS

-TYPE 'ALL DONE';
-TYPE &OPSTR;

This message has been edited. Last edited by: Tom Flynn,


Tom Flynn
WebFOCUS 8.1.05 - PROD/QA
DB2 - AS400 - Mainframe
October 12, 2007, 01:22 PM
SauPa
Tom,
Your solution works !. Thanks for your prompt response. It got me thinking, and I have coded an alternate solution, which I think can be more generic.


So Here Goes
===============================================
-SET &IPSTR='123,678,12,9,9999';
-* EXPECTED OUTPUT '''0123','0678','0012','0009','9999'''
-SET &OPSTR=' ';
-SET &DSP = ' Displayed String : ';


-SET &I=1;
-SET &TOK = '1';
-REPEAT :GETTOKENS WHILE &TOK NE ' ';
-SET &TOK = GETTOK(&IPSTR,&IPSTR.LENGTH,&I,',',4,'A4');
-SET &JTOK = RJUST(4,&TOK,'A4');
-SET &STOK = CTRAN(4,&JTOK,32,48,'A4');
-SET &FMTTOK = EDIT(&STOK,'''9999''');
-IF &TOK = ' ' THEN GOTO :GETTOKENS;
-TYPE &I ||':' || &TOK || ' Len:' || &TOK.LENGTH || 'FMTTOK:' || &FMTTOK;

-SET &OPSTR = IF &I NE 1 THEN &OPSTR || ',' || &FMTTOK ELSE
- &FMTTOK;

-SET &I = &I + 1;
-:GETTOKENS
-SET &OPSTR = '''' || &OPSTR || '''';
-TYPE &OPSTR;
===============================================
Thanks Again,
Saurabh Palkar


Saurabh Palkar