View previous topic :: View next topic |
Author |
Message |
Siddheart22 Beginner
Joined: 11 Apr 2005 Posts: 42 Topics: 19 Location: India
|
Posted: Thu Jun 16, 2005 8:20 pm Post subject: Initialize an Array in COBOL |
|
|
Hi,
This may sound like a silly question, but since I don't have any reference material to look up to, I thought of putting this on your website.
I have an internal array as:
01 TABLE-1 OCCURS 10 TIMES.
05 FIELD-A PIC X(10).
05 FIELD-B OCCURS 20 TIMES PIC X(05).
I need to initialize the FIELD-A as follows:
Entry-1 should contain: AAAAA
Entry-2 should contain: BBBBB
Entry-3 should contain: CCCCC
Entry-4 should contain: DDDDD
Entry-5 should contain: EEEEE
Entry-6 should contain: FFFFF
Entry-7 should contain: GGGGG
Entry-8 should contain: HHHHH
Entry-9 should contain: IIIII
Entry-10 should contain: JJJJJ
FIELD-B are populated in the program.
But Field-A I wanted to initialize in the working storage section itself. I know there is a way, but can't think of it right now.
Your assistance is really appreciated.
Thanks. |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12372 Topics: 75 Location: San Jose
|
Posted: Fri Jun 17, 2005 5:17 am Post subject: |
|
|
Siddheart22,
some minor corrections. You cannot have a OCCURS clause for level-1 items. Try this. I haven't tested it.
Code: |
01 TABLE-1.
05 TABLE-VALUES OCCURS 10 TIMES.
10 FIELD-A PIC X(10).
10 FIELD-B OCCURS 20 TIMES PIC X(05).
01 INIT-VAL.
05 INIT-1 PIC X(10) VALUE 'AAAA'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'BBBB'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'CCCC'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'DDDD'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'EEEE'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'FFFF'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'GGGG'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'HHHH'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'IIII'.
05 FILLER PIC X(100).
05 INIT-1 PIC X(10) VALUE 'JJJJ'.
05 FILLER PIC X(100).
MOVE INIT-VAL TO TABLE-1
|
Hope this helps..
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
Siddheart22 Beginner
Joined: 11 Apr 2005 Posts: 42 Topics: 19 Location: India
|
Posted: Fri Jun 17, 2005 10:10 am Post subject: |
|
|
Hi,
I got an error in compiling at the MOVE statement.
MOVE INIT-VAL TO TABLE-1.
Error says:
"TABLE-1" was a table-item but was not
subscripted or indexed. The first occurrence of the
table was assumed.
I have indexed the TABLE-1 with index INDEX-1 as I need to populate the FIELD-1B of the table through a looping logic in the program.
This is how the table defination looks like in my program.
01 WSTABLE.
05 TABLE-1 OCCURS 10 TIMES INDEXED BY INDEX-1.
10 FIELD-1A PIC X(10).
10 TABLE-B OCCURS 20 TIMES.
15 FIELD-1B PIC X(05).
How should this be done? |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12372 Topics: 75 Location: San Jose
|
Posted: Fri Jun 17, 2005 10:30 am Post subject: |
|
|
Siddheart22,
If you had actullay read my post clearly you would have found the mistake you are doing by yourself.You need to move the init-val to the 01 level item which is WSTABLE
Code: |
MOVE INIT-VAL TO WSTABLE
|
Hope this helps...
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
Siddheart22 Beginner
Joined: 11 Apr 2005 Posts: 42 Topics: 19 Location: India
|
Posted: Fri Jun 17, 2005 10:54 am Post subject: |
|
|
Thanks. But I have a new problem.
I have defined an array in my program as:
Code: |
01 wsRptTable.
05 wsReportAllRegionCounts occurs 10 times indexed by tranTypeIndex.
10 wsTxnDescription pic x(35).
10 wsCountsForAllRegions occurs 11 times indexed by RegCountIndex.
15 wsRegCount pic 9(06) value zeros.
05 wsTranTableMaxEntries pic 9(02) value 10.
|
Later, in my program I am trying to execute the following statements:
Code: |
perform p5380MoveReportCounters
varying tranTypeIndex
from 1 by 1
until tranTypeIndex > wsTranTableMaxEntries
|
But, the program does not enters in this p5380MoveReportCounters ...
Is there something wrong with the way the table is defined? or in the way the para is being called?
Your help is really appreciated. |
|
Back to top |
|
|
Dibakar Advanced
Joined: 02 Dec 2002 Posts: 700 Topics: 63 Location: USA
|
Posted: Sat Jun 18, 2005 12:15 am Post subject: |
|
|
I beleive i answered last question in another post. |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12372 Topics: 75 Location: San Jose
|
Posted: Sat Jun 18, 2005 12:19 am Post subject: |
|
|
Siddheart22,
You have defined "wsTranTableMaxEntries" as a part of the table. Change your definition as follows
Code: |
01 wsRptTable.
05 wsReportAllRegionCounts occurs 10 times indexed by tranTypeIndex.
10 wsTxnDescription pic x(35).
10 wsCountsForAllRegions occurs 11 times indexed by RegCountIndex.
15 wsRegCount pic 9(06) value zeros.
01 wsTranTableMaxEntries pic 9(02) value 10.
|
Hope this helps...
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
Dibakar Advanced
Joined: 02 Dec 2002 Posts: 700 Topics: 63 Location: USA
|
Posted: Sat Jun 18, 2005 12:47 am Post subject: |
|
|
the other post is deleted. but kolusu has provided better answer. |
|
Back to top |
|
|
Crox Beginner
Joined: 29 May 2004 Posts: 52 Topics: 9
|
Posted: Sat Jun 18, 2005 1:13 pm Post subject: Re: Initialize an Array in COBOL |
|
|
Siddheart22 wrote: | Hi,
This may sound like a silly question, but since I don't have any reference material to look up to, I thought of putting this on your website.
I have an internal array as:
01 TABLE-1 OCCURS 10 TIMES.
05 FIELD-A PIC X(10).
05 FIELD-B OCCURS 20 TIMES PIC X(05).
I need to initialize the FIELD-A as follows:
Entry-1 should contain: AAAAA
Entry-2 should contain: BBBBB
Entry-3 should contain: CCCCC
Entry-4 should contain: DDDDD
Entry-5 should contain: EEEEE
Entry-6 should contain: FFFFF
Entry-7 should contain: GGGGG
Entry-8 should contain: HHHHH
Entry-9 should contain: IIIII
Entry-10 should contain: JJJJJ
FIELD-B are populated in the program.
But Field-A I wanted to initialize in the working storage section itself. I know there is a way, but can't think of it right now.
Your assistance is really appreciated.
Thanks. |
If you don't need to initialize the fields more than one time, you can use a redefines to get what you need.
Example:
Code: | 01 INIT-VAL.
03 INIT-1 PIC X(10) VALUE 'AAAA'.
03 FILLER PIC X(100).
03 INIT-2 PIC X(10) VALUE 'BBBB'.
03 FILLER PIC X(100).
03 INIT-3 PIC X(10) VALUE 'CCCC'.
03 FILLER PIC X(100).
03 INIT-4 PIC X(10) VALUE 'DDDD'.
03 FILLER PIC X(100).
03 INIT-5 PIC X(10) VALUE 'EEEE'.
03 FILLER PIC X(100).
03 INIT-6 PIC X(10) VALUE 'FFFF'.
03 FILLER PIC X(100).
03 INIT-7 PIC X(10) VALUE 'GGGG'.
03 FILLER PIC X(100).
03 INIT-8 PIC X(10) VALUE 'HHHH'.
03 FILLER PIC X(100).
03 INIT-9 PIC X(10) VALUE 'IIII'.
03 FILLER PIC X(100).
03 INIT-10 PIC X(10) VALUE 'JJJJ'.
03 FILLER PIC X(100).
01 TABLE-1 REDEFINES INIT-VAL.
03 TABLE-VALUES OCCURS 10 TIMES.
05 FIELD-A PIC X(10).
05 FIELD-B OCCURS 20 TIMES PIC X(05).
|
Regards,
Crox |
|
Back to top |
|
|
dtf Beginner
Joined: 10 Dec 2004 Posts: 110 Topics: 8 Location: Colorado USA
|
Posted: Sat Jun 18, 2005 5:54 pm Post subject: |
|
|
If it is a one time thing, the redefines is the way to go. Even if it is not, you could always use the defintiion with the redefines, move the storage to a wok area, and then move it back as needed
________
Roor Bongs |
|
Back to top |
|
|
|
|