tinycobol/test.code/t06/index01.cob

308 lines
7.6 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. INDEX01.
AUTHOR. JFMOBACH.
* DATE-WRITTEN.
* 18-10-1997.
*
* OMSCHRIJVING :
*
* Testprogramm to :
* - build an indexed file with 100.000 records,
* - update that file with 50.000 records,
* - add 50.000 records to that file,
* - read via indexes 50.000 records, and
* - read the file sequential.
* Timestamps of start en end of each phase will be showed.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
* SOURCE-COMPUTER.
* IBM-PC.
* OBJECT-COMPUTER.
* IBM-PC.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FIDXWERKBESTANDSORT
ASSIGN TO "CURRFILENAME"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS IDXSORTEERVELD
* LOCK MODE IS MANUAL
.
DATA DIVISION.
FILE SECTION.
FD FIDXWERKBESTANDSORT
LABEL RECORDS ARE STANDARD
*V* RECORD IS VARYING IN SIZE DEPENDING ON RECORDLENGTE
.
01 RIDXWERKBESTANDSORT.
03 IDXSORTEERVELD PIC X(0013).
03 FILLER REDEFINES IDXSORTEERVELD.
05 IDXSORTEERVELD-N PIC 9(13).
03 IDXSORTEERDATA PIC X(0326).
*
WORKING-STORAGE SECTION.
* 01 RECORDLENGTE PIC 9(04) COMP SYNC.
01 RECORDLENGTE PIC 9(04) COMP.
01 DATUM-TIJD-VELDEN.
03 DATUM PIC 9(06).
03 FILLER REDEFINES DATUM.
05 SYS-JJ PIC 99.
05 SYS-MM PIC 99.
05 SYS-DD PIC 99.
03 TIJD PIC 9(08).
03 FILLER REDEFINES TIJD.
05 SYS-UUR PIC 99.
05 SYS-MIN PIC 99.
05 SYS-SEC PIC 99.
05 SYS-HSS PIC 99.
*
01 KOPREGEL-1.
03 K1-NAAM PIC X(30) VALUE SPACES.
03 FILLER PIC X(9) VALUE " Datum: ".
03 K1-DD PIC 9(2).
03 FILLER PIC X VALUE "-".
03 K1-MM PIC 9(2).
03 FILLER PIC X VALUE "-".
03 K1-JJ PIC 9(2).
03 FILLER PIC X(7) VALUE " Tijd: ".
03 K1-UUR PIC 9(2).
03 FILLER PIC X VALUE ":".
03 K1-MIN PIC 9(2).
03 FILLER PIC X VALUE ":".
03 K1-SEC PIC 9(2).
03 FILLER PIC X(3) VALUE " # ".
* 03 K1-AANTAL PIC ZZZ.ZZ9 BLANK ZERO.
03 K1-AANTAL PIC ZZZ.ZZ9 VALUE 0.
*
01 WERKVELDEN.
03 CURRFILENAME PIC X(0030) VALUE "TESTDATA".
03 SLEUTELWAARDE PIC 9(13).
03 SLEUTEL-MAX PIC 9(13) VALUE 1000000.
03 SLEUTEL-INTERVAL PIC 9(13).
03 AANTAL-RECORDS PIC 9(06).
*
*
PROCEDURE DIVISION.
BESTURING SECTION.
P00.
*
*
MOVE 0 TO AANTAL-RECORDS
MOVE "FILE CONSTRUCTION : START " TO K1-NAAM
PERFORM TOON-TIJD
*
OPEN OUTPUT FIDXWERKBESTANDSORT
PERFORM GENEREER-RECORD
VARYING SLEUTELWAARDE FROM 1 BY 10
UNTIL SLEUTELWAARDE > SLEUTEL-MAX
CLOSE FIDXWERKBESTANDSORT
*
MOVE "FILE CONSTRUCTION : STOP " TO K1-NAAM
PERFORM TOON-TIJD
*
*
MOVE 0 TO AANTAL-RECORDS
MOVE "UPDATE 50.000 : START " TO K1-NAAM
PERFORM TOON-TIJD
*
OPEN I-O FIDXWERKBESTANDSORT
COMPUTE SLEUTEL-INTERVAL = SLEUTEL-MAX / 50000
PERFORM WIJZIG-RECORD
VARYING SLEUTELWAARDE FROM 1 BY SLEUTEL-INTERVAL
UNTIL SLEUTELWAARDE > SLEUTEL-MAX
CLOSE FIDXWERKBESTANDSORT
*
MOVE "UPDATE 50.000 : STOP " TO K1-NAAM
PERFORM TOON-TIJD
*
*
MOVE 0 TO AANTAL-RECORDS
MOVE "INSERT 50.000 : START " TO K1-NAAM
PERFORM TOON-TIJD
*
OPEN I-O FIDXWERKBESTANDSORT
COMPUTE SLEUTEL-INTERVAL = SLEUTEL-MAX / 50000
PERFORM WIJZIG-RECORD
VARYING SLEUTELWAARDE FROM 3 BY SLEUTEL-INTERVAL
UNTIL SLEUTELWAARDE > SLEUTEL-MAX
CLOSE FIDXWERKBESTANDSORT
*
MOVE "INSERT 50.000 : STOP " TO K1-NAAM
PERFORM TOON-TIJD
*
*
MOVE 0 TO AANTAL-RECORDS
MOVE "INDEXED READ : START " TO K1-NAAM
PERFORM TOON-TIJD
*
OPEN I-O FIDXWERKBESTANDSORT
PERFORM LEES-INDEXED
VARYING SLEUTELWAARDE FROM 1 BY 10
UNTIL SLEUTELWAARDE > SLEUTEL-MAX
CLOSE FIDXWERKBESTANDSORT
*
MOVE "INDEXED READ : STOP " TO K1-NAAM
PERFORM TOON-TIJD
*
*
MOVE 0 TO AANTAL-RECORDS
MOVE "FILE READ : START " TO K1-NAAM
PERFORM TOON-TIJD
*
OPEN INPUT FIDXWERKBESTANDSORT
PERFORM LEES-RECORD
VARYING SLEUTELWAARDE FROM 1 BY 10
UNTIL SLEUTELWAARDE > SLEUTEL-MAX
CLOSE FIDXWERKBESTANDSORT
*
MOVE "FILE READ : STOP " TO K1-NAAM
PERFORM TOON-TIJD
.
END-OF-SECTION.
STOP RUN.
*/
* * * *
* * * * TOON-TIJD :
* * * * TOON DATUM EN TIJD DER ACTIE.
* * * *
*
TOON-TIJD SECTION.
P00.
ACCEPT DATUM FROM DATE
ACCEPT TIJD FROM TIME
MOVE SYS-DD TO K1-DD
MOVE SYS-MM TO K1-MM
MOVE SYS-JJ TO K1-JJ
MOVE SYS-UUR TO K1-UUR
MOVE SYS-MIN TO K1-MIN
MOVE SYS-SEC TO K1-SEC
MOVE AANTAL-RECORDS TO K1-AANTAL
DISPLAY KOPREGEL-1
.
*
* UITGANG.
*
END-OF-SECTION.
EXIT.
/
* * * *
* * * * GENEREER-RECORD :
* * * * GENEREER EEN RECORD IN HET BESTAND.
* * * *
*
GENEREER-RECORD SECTION.
P00.
ADD 1 TO AANTAL-RECORDS
MOVE SLEUTELWAARDE TO IDXSORTEERVELD-N
MOVE SPACES TO IDXSORTEERDATA
WRITE RIDXWERKBESTANDSORT
INVALID KEY
DISPLAY "WRIT INVALID KEY " SLEUTELWAARDE
STOP RUN
.
*
* UITGANG.
*
END-OF-SECTION.
EXIT.
/
* * * *
* * * * WIJZIG-RECORD :
* * * * WIJZIG EEN RECORD IN HET BESTAND.
* * * *
*
WIJZIG-RECORD SECTION.
P00.
ADD 1 TO AANTAL-RECORDS
MOVE SLEUTELWAARDE TO IDXSORTEERVELD-N
READ FIDXWERKBESTANDSORT
INVALID KEY
GO TO P50
.
MOVE "UPDATE" TO IDXSORTEERDATA
REWRITE RIDXWERKBESTANDSORT
INVALID KEY
DISPLAY "REWR INVALID KEY " SLEUTELWAARDE
STOP RUN
.
GO TO END-OF-SECTION
.
P50.
MOVE "INSERT" TO IDXSORTEERDATA
MOVE SLEUTELWAARDE TO IDXSORTEERVELD-N
WRITE RIDXWERKBESTANDSORT
INVALID KEY
DISPLAY "WRIT INVALID KEY " SLEUTELWAARDE
STOP RUN
.
*
* UITGANG.
*
END-OF-SECTION.
EXIT.
/
* * * *
* * * * LEES-INDEXED :
* * * * LEES EEN RECORD VIA DE INDEX UIT HET BESTAND.
* * * *
*
LEES-INDEXED SECTION.
P00.
ADD 1 TO AANTAL-RECORDS
MOVE SLEUTELWAARDE TO IDXSORTEERVELD-N
READ FIDXWERKBESTANDSORT
INVALID KEY
DISPLAY "READ INVALID KEY " SLEUTELWAARDE
STOP RUN
.
*
* UITGANG.
*
END-OF-SECTION.
EXIT.
/
* * * *
* * * * LEES-RECORD :
* * * * LEES EEN RECORD UIT HET BESTAND.
* * * *
*
LEES-RECORD SECTION.
P00.
ADD 1 TO AANTAL-RECORDS
READ FIDXWERKBESTANDSORT
NEXT RECORD
AT END
ADD SLEUTEL-MAX, 1 GIVING SLEUTELWAARDE
.
*
* UITGANG.
*
END-OF-SECTION.
EXIT.
*
* SERVICE ROUTINES.
*
IO-CALL SECTION.
P00.
DUMMY-SECTION.
END-OF-SECTION.
EXIT.