For Programmers: Free Programming Magazines  


Home > Archive > Cobol > July 2006 > algorithm









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author algorithm
Jerome

2006-07-10, 6:55 pm

Hello,

I've got two files describe like this :

First file (with three keys : GCFCL-CLE, GCFCL-CLE2 and GCFCL-CLE3) :

FD FGCFCL LABEL RECORD STANDARD.
01 GCFCL-FILE.
02 GCFCL-CLE.
04 GCFCL-JR PIC 999.
04 GCFCL-DATE.
06 GCFCL-ANNEE PIC 9(4).
06 GCFCL-MOIS PIC 99.
06 GCFCL-JOUR PIC 99.
04 GCFCL-NOPIECE PIC 9(7).
04 GCFCL-TIERS PIC 9(6).
*
02 GCFCL-CLE2.
04 GCFCL-TIERS2 PIC 9(6).
04 GCFCL-DATE2.
06 GCFCL-ANNEE2 PIC 9(4).
06 GCFCL-MOIS2 PIC 99.
06 GCFCL-JOUR2 PIC 99.
04 GCFCL-NOPIECE2 PIC 9(7).
*
02 GCFCL-CLE3.
04 GCFCL-DATECH.
06 GCFCL-ANNEECH PIC 9(4).
06 GCFCL-MOISECH PIC 99.
06 GCFCL-JOURECH PIC 99.
....

second file (with two keys : GCECL-CLE and GCECL-CLE2) :

FD FGCECL LABEL RECORD STANDARD.
01 GCECL-FILE.
02 GCECL-CLE.
04 GCECL-JR PIC 999.
04 GCECL-DATE.
06 GCECL-ANNEE PIC 9(4).
06 GCECL-MOIS PIC 99.
06 GCECL-JOUR PIC 99.
04 GCECL-BORDEREAU PIC 9(10).
04 GCECL-NOPIECE PIC 9(7).
04 GCECL-NOFAC PIC 9(7).
*
02 GCECL-CLE2.
04 GCECL-TIERS2 PIC 9(6).
04 GCECL-DATE2.
06 GCECL-ANNEE2 PIC 9(4).
06 GCECL-MOIS2 PIC 99.
06 GCECL-JOUR2 PIC 99.
04 GCECL-NOPIECE2 PIC 9(7).
04 GCECL-NOFAC2 PIC 9(7).
....
(There is a trap : GCFCL-NOPIECE is different from GCECL-NOPIECE, in
fact GCFCL-NOPIECE should be equal, if a record exist, to GCECL-NOFAC)

I must read the first file sequentially. OK, no problem.

Then, for each record of the first file, I search one or more records in
the second file. And I don't know how to do that.

I tried this :

OPEN INPUT FGCFCL.
OPEN INPUT FGCECL.
OPEN OUTPUT OUTFACT.

INITIALIZE GCFCL-CLE.
INITIALIZE GCECL-CLE.

START FGCFCL KEY IS GREATER THAN GCFCL-CLE
INVALID KEY GO TO AFFICHAGE.

READ FGCFCL NEXT RECORD
AT END SET EndOfFile OF FGCFCL TO TRUE
END-READ


PERFORM UNTIL EndOfFile OF FGCFCL

MOVE GCFCL-CLE2(1:14) TO TMP-CLE
MOVE ZEROS TO TMP-CLE(15:13)
MOVE TMP-CLE TO GCECL-CLE2

START FGCECL KEY IS GREATER THAN GCECL-CLE2
READ FGCECL RECORD
KEY IS GCECL-CLE2
INVALID KEY CONTINUE
END-READ
MOVE GCECL-RGT TO OUT-RGT

WRITE OUT-INFO-FACT
READ FGCFCL NEXT RECORD
AT END SET EndOfFile OF FGCFCL TO TRUE
END-READ
END-PERFORM.

FERMETURE.
CLOSE FGCFCL.
CLOSE FGCECL.
CLOSE OUTFACT.

Best regards

Jerome
Richard

2006-07-10, 6:55 pm


Jerome wrote:

> (There is a trap : GCFCL-NOPIECE is different from GCECL-NOPIECE, in
> fact GCFCL-NOPIECE should be equal, if a record exist, to GCECL-NOFAC)
>
> I must read the first file sequentially. OK, no problem.
>
> Then, for each record of the first file, I search one or more records in
> the second file. And I don't know how to do that.


Your fields name bring to mind 'you are in a maze of little twisted
passages'.

The way to do this, using key names that I can follow:

PERFORM UNTIL Main-Key = HIGH-Values

MOVE LOW-VALUES TO Main-Key
START Main-File
KEY NOT < Main-Key
INVALID KEY
MOVE HIGH-VALUES TO Main-Key
END-START
PERFORM UNTIL Main-Key = HIGH-Values
READ Main-File
NEXT RECORD
AT END
MOVE HIGH-VALUES TO Main-Key
NOT AT END
MOVE Main-Key TO Trans-Key
START Trans-File
KEY NOT < Trans-Key
INVALID KEY
MOVE HIGH-VALUES TO Trans-Key
END-START
PERFORM UNTIL Trans-Key-Main NOT =
Main-Key
READ Trans-Key
NEXT RECORD
AT END
MOVE HIGH-VALUES TO
Trans-Key
END-READ
IF ( Trans-Key-Main = Main-Key )
process
END-IF
END-PERFORM
END-READ
END-PERFORM

Note 'Trans-Key-Main' is that part of the Trans-Key that matches
Main-Key.
NEXT RECORD will read sequentially

HeyBub

2006-07-10, 6:55 pm

Jerome wrote:

Hint:

LOOP.
READ SEQUENTIAL-FILE.
MOVE SEQUENTIAL-FILE-KEY TO ISAM-FILE-KEY.
READ ISAM-FILE
INVALID KEY PERFORM OOPS
NOT INVALID KEY PERFORM MATCHED
END-READ.




hcmason@sbcglobal.net

2006-07-10, 6:55 pm

Dear Jerome:
I would suggest looking at using the file status feature instead of
invalid key.
Also, use start verb with not less than:

select gcfcl-file
assign to whatever
file status is ws-file-status.


working-storage section.
01 ws-file-status pic 9(02) value zeroes.


start gcfcl-file key not less than some-key.

if ws-file-status equal zeroes
* found it....
else
*not on file......
display 'not found'
end-if.

read gcfcl-file next record.

* still need to check the key value...might be another key(using the
generic key, greater than or equal to...
if the-key equal key-i-was-looking-for.
found it....
else
not found
end-if.
Jerome wrote:
> Hello,
>
> I've got two files describe like this :
>
> First file (with three keys : GCFCL-CLE, GCFCL-CLE2 and GCFCL-CLE3) :
>
> FD FGCFCL LABEL RECORD STANDARD.
> 01 GCFCL-FILE.
> 02 GCFCL-CLE.
> 04 GCFCL-JR PIC 999.
> 04 GCFCL-DATE.
> 06 GCFCL-ANNEE PIC 9(4).
> 06 GCFCL-MOIS PIC 99.
> 06 GCFCL-JOUR PIC 99.
> 04 GCFCL-NOPIECE PIC 9(7).
> 04 GCFCL-TIERS PIC 9(6).
> *
> 02 GCFCL-CLE2.
> 04 GCFCL-TIERS2 PIC 9(6).
> 04 GCFCL-DATE2.
> 06 GCFCL-ANNEE2 PIC 9(4).
> 06 GCFCL-MOIS2 PIC 99.
> 06 GCFCL-JOUR2 PIC 99.
> 04 GCFCL-NOPIECE2 PIC 9(7).
> *
> 02 GCFCL-CLE3.
> 04 GCFCL-DATECH.
> 06 GCFCL-ANNEECH PIC 9(4).
> 06 GCFCL-MOISECH PIC 99.
> 06 GCFCL-JOURECH PIC 99.
> ...
>
> second file (with two keys : GCECL-CLE and GCECL-CLE2) :
>
> FD FGCECL LABEL RECORD STANDARD.
> 01 GCECL-FILE.
> 02 GCECL-CLE.
> 04 GCECL-JR PIC 999.
> 04 GCECL-DATE.
> 06 GCECL-ANNEE PIC 9(4).
> 06 GCECL-MOIS PIC 99.
> 06 GCECL-JOUR PIC 99.
> 04 GCECL-BORDEREAU PIC 9(10).
> 04 GCECL-NOPIECE PIC 9(7).
> 04 GCECL-NOFAC PIC 9(7).
> *
> 02 GCECL-CLE2.
> 04 GCECL-TIERS2 PIC 9(6).
> 04 GCECL-DATE2.
> 06 GCECL-ANNEE2 PIC 9(4).
> 06 GCECL-MOIS2 PIC 99.
> 06 GCECL-JOUR2 PIC 99.
> 04 GCECL-NOPIECE2 PIC 9(7).
> 04 GCECL-NOFAC2 PIC 9(7).
> ...
> (There is a trap : GCFCL-NOPIECE is different from GCECL-NOPIECE, in
> fact GCFCL-NOPIECE should be equal, if a record exist, to GCECL-NOFAC)
>
> I must read the first file sequentially. OK, no problem.
>
> Then, for each record of the first file, I search one or more records in
> the second file. And I don't know how to do that.
>
> I tried this :
>
> OPEN INPUT FGCFCL.
> OPEN INPUT FGCECL.
> OPEN OUTPUT OUTFACT.
>
> INITIALIZE GCFCL-CLE.
> INITIALIZE GCECL-CLE.
>
> START FGCFCL KEY IS GREATER THAN GCFCL-CLE
> INVALID KEY GO TO AFFICHAGE.
>
> READ FGCFCL NEXT RECORD
> AT END SET EndOfFile OF FGCFCL TO TRUE
> END-READ
>
>
> PERFORM UNTIL EndOfFile OF FGCFCL
>
> MOVE GCFCL-CLE2(1:14) TO TMP-CLE
> MOVE ZEROS TO TMP-CLE(15:13)
> MOVE TMP-CLE TO GCECL-CLE2
>
> START FGCECL KEY IS GREATER THAN GCECL-CLE2
> READ FGCECL RECORD
> KEY IS GCECL-CLE2
> INVALID KEY CONTINUE
> END-READ
> MOVE GCECL-RGT TO OUT-RGT
>
> WRITE OUT-INFO-FACT
> READ FGCFCL NEXT RECORD
> AT END SET EndOfFile OF FGCFCL TO TRUE
> END-READ
> END-PERFORM.
>
> FERMETURE.
> CLOSE FGCFCL.
> CLOSE FGCECL.
> CLOSE OUTFACT.
>
> Best regards
>
> Jerome


Jerome

2006-07-11, 3:55 am

Thank you very much for your answers.

I'm going to try all your advices and hints.

Best regards

Jerome
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com