Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Unstring ',' delimited

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> COBOL Programming
View previous topic :: :: View next topic  
Author Message
sid_aec

New User


Joined: 01 Jul 2008
Posts: 60
Location: Kolkata

PostPosted: Wed Dec 23, 2009 11:15 am    Post subject: Unstring ',' delimited
Reply with quote

Hi,

I have a data looks as below:
00BDXXX,00XXSM,00XXMSM,00YYAMSM,00YYSM

50 such parameters will be passed to a stored proc.
I want to finally make a table pouplated with this data as below:

01 data-table occurs 50 times
05 num pic s9(4) comp.
05 char pic x(06)

As the values could be of 7 bytes or 8 bytes and I need to put it into a table of 8 bytes field as shown above.
Could you please help me how to achieve it..

Thanking you,
Back to top
View user's profile Send private message

Escapa

Senior Member


Joined: 16 Feb 2007
Posts: 1399
Location: IL, USA

PostPosted: Wed Dec 23, 2009 11:32 am    Post subject:
Reply with quote

What have you tried so far? Where are you stuck?
Back to top
View user's profile Send private message
karisurya

New User


Joined: 02 Aug 2007
Posts: 64
Location: Bangalore

PostPosted: Wed Dec 23, 2009 12:54 pm    Post subject:
Reply with quote

Quote:

I have a data looks as below:
00BDXXX,00XXSM,00XXMSM,00YYAMSM,00YYSM

I guess you are trying to tell first 2 bytes are numeric and remaining alphanumeric, Every one can interpret the input in there own way so its good if you can define your input clearly.
Quote:

50 such parameters will be passed to a stored proc.

Can you explain the above statement? Just to understand how you are passing data to Program.
Quote:

01 data-table occurs 50 times
05 num pic s9(4) comp.
05 char pic x(06)

As per my knowledge we cant define working storage like this.....

Conclusion:
Refine your requirement state clearly your Input/Output and where you are facing trouble in coding which will help you to get quick responses.
Back to top
View user's profile Send private message
viveksurya

New User


Joined: 08 Jun 2009
Posts: 36
Location: Bangalore

PostPosted: Wed Dec 23, 2009 3:08 pm    Post subject:
Reply with quote

Can you be more elaborate on your requirement and also where are you facing problem in whatever way you are approaching to achieve this.

For the time being, the way you are defining the data-items is incorrect.

Quote:
01 data-table occurs 50 times
05 num pic s9(4) comp.
05 char pic x(06)


You cant use OCCURS clause for 01 level number.
Back to top
View user's profile Send private message
viveksurya

New User


Joined: 08 Jun 2009
Posts: 36
Location: Bangalore

PostPosted: Wed Dec 23, 2009 5:56 pm    Post subject:
Reply with quote

Understanding that you want the parameters (having numeric and character part) to be moved to a table, here is a logic:

Code:

.
.
.
WORKING-STORAGE SECTION.                                         
01  WS-INPUT            PIC X(47)                               
         VALUE '00BDXXX,00XXSM,00XXMSM,00YYAMSM,00YYSM,00ZZAHSM'.
                                                                 
01  SAMPLE-TABLE.                                               
    05  SAMPLE-1 OCCURS 6 TIMES.                                 
        10 SAMPLE-ITEM-1       PIC S9(4) COMP.                   
        10 SAMPLE-ITEM-2       PIC X(06) .

PROCEDURE DIVISION.                       

A000-MAINLINE.                                     
    UNSTRING WS-INPUT DELIMITED BY ","             
       INTO SAMPLE-1(1), SAMPLE-1(2), SAMPLE-1(3), 
            SAMPLE-1(4), SAMPLE-1(5), SAMPLE-1(6)   
                                                   
    DISPLAY "SAMPLE-1 =" SAMPLE-1(1)               
    DISPLAY "SAMPLE-2 =" SAMPLE-1(2)               
    DISPLAY "SAMPLE-3 =" SAMPLE-1(3)               
    DISPLAY "SAMPLE-4 =" SAMPLE-1(4)               
    DISPLAY "SAMPLE-5 =" SAMPLE-1(5)               
    DISPLAY "SAMPLE-6 =" SAMPLE-1(6). 
    .
    .
    .
   


Output:
Code:

SAMPLE-1 =00BDXXX 
SAMPLE-2 =00XXSM   
SAMPLE-3 =00XXMSM 
SAMPLE-4 =00YYAMSM
SAMPLE-5 =00YYSM   
SAMPLE-6 =00ZZAHSM


PS: I have taken here 6 parameters which will be 50 in your case.

Hope this helps.
Back to top
View user's profile Send private message
sid_aec

New User


Joined: 01 Jul 2008
Posts: 60
Location: Kolkata

PostPosted: Wed Dec 23, 2009 7:56 pm    Post subject:
Reply with quote

viveksurya,

Exactly this is I required.I also able to make it for 5 times,but my requirement is for 50 times.

Do I need to use hard code like 'SAMPLE-1(1), SAMPLE-1(2), SAMPLE-1(3), SAMPLE-1(4), SAMPLE-1(5), SAMPLE-1(6) ..

Because for 50 times,hardcoding all occurance requires more coding effort.

Is there anyother way I can make it instead of hardcoding all occurances..
Please advise if possible..


Thanks,
Siddhartha..
Back to top
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6967
Location: porcelain throne

PostPosted: Wed Dec 23, 2009 9:01 pm    Post subject:
Reply with quote

Siddhartha wrote:
Because for 50 times,hardcoding all occurance requires more coding effort.


suggest that you look at the UNSTRING statement in a cobol reference manual.

any loop that you write to separately UNSTRING each item would take longer to execute than a single UNSTRING into the 50 receiving items.

in fact, in the time you took to post your whine about having to do so much extra work, you could have coded the 50 separate references.

[Personal opinion on]
I wish that you had 1000 occurances.
[Personal opinion off]
Back to top
View user's profile Send private message
viveksurya

New User


Joined: 08 Jun 2009
Posts: 36
Location: Bangalore

PostPosted: Thu Dec 24, 2009 10:39 am    Post subject:
Reply with quote

As Dick mentioned, UNSTRING would take more time as the no. of occurances increases.

Quote:
Do I need to use hard code like 'SAMPLE-1(1), SAMPLE-1(2), SAMPLE-1(3), SAMPLE-1(4), SAMPLE-1(5), SAMPLE-1(6) ..


You can use subscript to refer to each occurance.
Back to top
View user's profile Send private message
dbzTHEdinosauer

Global Moderator


Joined: 20 Oct 2006
Posts: 6967
Location: porcelain throne

PostPosted: Thu Dec 24, 2009 7:52 pm    Post subject:
Reply with quote

Vivek,

the lazy TS did not want to code each of the 50 receiving fields in the UNSTRING.

absolute indexing (1, 2 , 4 etc..) is the fastest.
using subscripts or indexing would cause more code to be generated by the compiler.

and I didn't say (even though it is true) that more receiving fields in an UNSTRING would involve more time to execute.

what I did say was that any loop constructed so as to save this poor coder time in writing his program would cause a lot of extra execution time.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> COBOL Programming All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts Sort Card to Remove Duplicate records... raj4neo SYNCSORT 2 Wed Jan 25, 2017 4:44 am
No new posts SQZ pipe delimited file with 1 column... Rick Silvers DFSORT/ICETOOL 6 Sun Nov 06, 2016 8:11 pm
No new posts To trim spaces in a pipe delimited da... Nish84 COBOL Programming 16 Mon Oct 10, 2016 1:54 pm
No new posts Format to pipe delimited with variabl... pshongal SYNCSORT 6 Wed Sep 14, 2016 2:48 pm
No new posts Unstring list of values into an array. Roshnii COBOL Programming 8 Mon Jun 27, 2016 6:25 pm


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us