Jason,
as Bern pointed out you need to define the field as COMP (or new BINARY)
- there are 2, 4 or 8 byte binary fields- no 6 bytes- but you can
redefine a 8 byte binary field with a two byte filler and 6 bytes for
the binary number.
Martin
On 14.06.24 14:14, Jason Cai wrote:
Bernd
Thank you for providing another approach to read and process the file. I have a
few questions to confirm my understanding:
Q1:
File Section Definition:
cobol
Copy code
FILE SECTION.
FD INPUT-FILE.
01 INPUT-RECORD PIC X(80).
Is it correct ?
Q2:
Do hexadecimal lengths require special handling?
Q3:
How do we identify which parts of the 80-column data represent the length and
which parts represent the content, given that the length is a hexadecimal
number?
Thank you for your assistance!
Best regards,
Jason Cai
On Fri, 14 Jun 2024 13:13:08 +0200, Bernd Oppolzer<bernd.oppol...@t-online.de>
wrote:
Sorry, Typo ... should read: ... and Y is the maximum length plus 2 ...
Am 14.06.2024 um 13:09 schrieb Bernd Oppolzer:
Hi Martin and Jason,
I agree with Martin that the length / data elements must be processed
one at a time.
Some additional remarks:
- the length field must have attribute S9(4) comp, because it is a
binary length field
- I would suggest not to use the OCCURS ... DEPENDING clause at all,
but unstead work with MOVE with positions,
like this: MOVE SOURCE (X:Y) TO TEMP-WORK ... where X is the position
in the source string where the length
field of the actual element starts and X is the maximum length plus 2.
Then you can process the content,
using TEMP-WORK, by examining the length field at the start of
TEMP-WORK, and then increment X by the
length field plus 2
- is the length of the original source string fixed of variable?
Doesn't really matter; when looping over this
string, you have to take care to finish processing when the value of X
reaches the end of the string.
@Martin: we didn't talk for a long time; I'm now working for more than
4 years with my COBOL/VSE assignment
and consider myself a COBOL expert :-) but still working with PL/1 and
ASSEMBLER with the other customer.
You know them all ...
HTH, kind regards
Bernd
Am 14.06.2024 um 11:00 schrieb Martin Trübner:
Jason,
try it with this (and use correct numbers- your sample had 0 to 3)
05 LL1 PIC 9(2).
05 TT1 OCCURS 0 TO 3 TIMES
DEPENDING ON LL1.
05 REMAIN PIC X(4)
and in working storage section have this:
01 TEMP-WORK.
05 LL2 PIC 9(2).
05 TT2 OCCURS 0 TO 3 TIMES
DEPENDING ON LL2.
An extra MOVE before you touch TT2.
or multiple repeats of the above
Martin
On 14.06.24 09:39, Jason Cai wrote:
Subject: Assistance Needed with COBOL File Reading Structure
Dear [Recipient's Name],
I hope this message finds you well.
I am currently working on a COBOL program to read a file with the
following format: length1, content1, length2, content2, and so on.
An example of the data in the file is as follows:
```
00F00C0000FFF00F
0110140003156011
```
I intended to use the following copybook to read the data:
```cobol
05 LL1 PIC 9(2).
05 TT1 OCCURS 1 TO 2 TIMES
DEPENDING ON LL1.
05 LL2 PIC 9(2).
05 TT2 OCCURS 1 TO 2 TIMES
DEPENDING ON LL2.
```
However, I encountered an error:
```
IGYGR1137-S "OCCURS DEPENDING ON" object "LL2" was defined in a
variably located area. Execution results are unpredictable.
```
The suggested structure to avoid this error is as follows:
```cobol
05 LL1 PIC 9(1).
05 LL2 PIC 9(1).
05 TT1 OCCURS 1 TO 2 TIMES
DEPENDING ON LL1.
10 TT11 PIC X(1).
05 TT2 OCCURS 1 TO 3 TIMES
DEPENDING ON LL2.
10 TT21 PIC X(1).
```
Unfortunately, this structure does not match the format of the file
I need to read. Could you please advise on how to correctly read a
file with this structure using COBOL?
Thank you for your any assistance !
Best regards,
Jason Cai
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send emailtolists...@listserv.ua.edu with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email tolists...@listserv.ua.edu with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email tolists...@listserv.ua.edu with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email tolists...@listserv.ua.edu with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN