Problem:
My table has a number of occurrences that is variable.
Is it possible to manage this table dynamically ?
Resolution:
The example is :
The table is managed dynamically
The table is sort
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG.
WORKING-STORAGE SECTION.
01 TABLE-DYNAMIQUE IS TYPEDEF.
10 LI-AIDE-TABLE-CLEF PIC X(10).
10 LI-AIDE-TABLE-INDEX PIC 9(05).
10 LI-AIDE-TABLE-AFFICH PIC X(60).
01 W-TABLE-AIDE TABLE-DYNAMIQUE.
01 i PIC 9(08).
01 WS-AIDE.
05 WS-AIDE-NOMBRE-MAX PIC 9(05).
01 mem-pointer USAGE POINTER.
01 mem-size PIC X(04) COMP-5.
01 flags PIC X(04) COMP-5.
01 status-code PIC X(04) COMP-5.
01 mem-ind pic 9(08).
01 W-OK PIC X(01).
LINKAGE SECTION.
01 LI-AIDE-TABLE PIC X ANY LENGTH.
01 LI-AIDE.
05 LI-AIDE-NOMBRE-MAX PIC 9(05).
05 LI-AIDE-IND PIC 9(05).
05 LI-AIDE-FENETRE.
10 LI-AIDE-COLONNE PIC 9(02).
10 LI-AIDE-ABS PIC 9(02).
10 LI-AIDE-ORD PIC 9(02).
05 LI-AIDE-OCC-AFFICH PIC 9(02).
05 LI-AIDE-TITRE PIC X(78).
05 LI-AIDE-AIDE PIC X(78).
05 LI-AIDE-ACCEPT PIC 9(01).
05 LI-AIDE-CURSEUR PIC 9(05).
PROCEDURE DIVISION.
P00.
PERFORM ALLOUER-MEM.
DISPLAY "CBL_ALLOC_MEM".
PERFORM ALIMENTER-TABLE.
DISPLAY "FIN ALIM TABLE".
CALL "Sav" USING WS-AIDE LI-AIDE-TABLE.
CANCEL "Sav".
DISPLAY "SUITE:".
ACCEPT W-OK.
call "Sorttab" using WS-aide li-aide-table.
CALL "Sav" USING WS-AIDE LI-AIDE-TABLE.
PERFORM LIBERER-MEM.
GO TO FP.
ERREUR-MEM.
DISPLAY "ERREUR MEM".
FP.
STOP RUN.
ALLOUER-MEM SECTION.
P00.
DISPLAY " Number of Occurs"
ACCEPT WS-AIDE-NOMBRE-MAX.
IF WS-AIDE-NOMBRE-MAX EQUAL 0
MOVE 10 TO WS-AIDE-NOMBRE-MAX .
COMPUTE mem-size = LENGTH OF TABLE-DYNAMIQUE *
WS-AIDE-NOMBRE-MAX
CALL "CBL_ALLOC_MEM" USING mem-pointer
BY VALUE mem-size
flags
RETURNING status-code.
IF (status-code NOT = ZERO)
GO TO ERREUR-MEM
END-IF.
SET ADDRESS LI-AIDE-TABLE TO mem-pointer.
FP.
EXIT.
ALIMENTER-TABLE SECTION.
P00.
MOVE 1 TO mem-ind.
PERFORM VARYING i FROM 1 BY 1
UNTIL (i > WS-AIDE-NOMBRE-MAX)
MOVE SPACES TO W-TABLE-AIDE
COMPUTE LI-AIDE-TABLE-INDEX OF W-TABLE-AIDE
= function random() * 100000
STRING "STr_" i INTO LI-AIDE-TABLE-AFFICH
OF W-TABLE-AIDE
MOVE W-TABLE-AIDE TO LI-AIDE-TABLE
(mem-ind : LENGTH OF TABLE-DYNAMIQUE)
COMPUTE mem-ind = i * LENGTH OF TABLE-DYNAMIQUE
1
END-PERFORM.
FP.
EXIT.
LIBERER-MEM SECTION.
P00.
CALL "CBL_FREE_MEM" USING BY VALUE mem-pointer
RETURNING status-code.
IF (status-code NOT = ZERO)
GO TO ERREUR-MEM
END-IF.
FP.
EXIT.
IDENTIFICATION DIVISION.
PROGRAM-ID. SAV.
select f1 assign "RESULT"
organization line sequential.
fd f1 .
01 f1-enr pic x(183).
WORKING-STORAGE SECTION.
01 TABLE-DYNAMIQUE IS TYPEDEF.
10 LI-AIDE-TABLE-CLEF PIC X(10).
10 LI-AIDE-TABLE-INDEX PIC 9(05).
10 LI-AIDE-TABLE-AFFICH PIC X(60).
01 W-TABLE-AIDE TABLE-DYNAMIQUE.
01 i PIC 9(08).
01 WS-AIDE.
05 WS-AIDE-NOMBRE-MAX PIC 9(05).
01 mem-pointer USAGE POINTER.
01 mem-size PIC X(04) COMP-5.
01 flags PIC X(04) COMP-5.
01 status-code PIC X(04) COMP-5.
01 mem-ind pic 9(08).
01 W-OK PIC X(01).
LINKAGE SECTION.
01 LI-AIDE-TABLE PIC X ANY LENGTH.
01 LI-AIDE.
05 LI-AIDE-NOMBRE-MAX PIC 9(05).
05 LI-AIDE-IND PIC 9(05).
05 LI-AIDE-FENETRE.
10 LI-AIDE-COLONNE PIC 9(02).
10 LI-AIDE-ABS PIC 9(02).
10 LI-AIDE-ORD PIC 9(02).
05 LI-AIDE-OCC-AFFICH PIC 9(02).
05 LI-AIDE-TITRE PIC X(78).
05 LI-AIDE-AIDE PIC X(78).
05 LI-AIDE-ACCEPT PIC 9(01).
05 LI-AIDE-CURSEUR PIC 9(05).
PROCEDURE DIVISION USING LI-AIDE LI-AIDE-TABLE.
P00.
open extend f1.
PERFORM VARYING i FROM 1 BY LENGTH OF TABLE-DYNAMIQUE
UNTIL (i > LI-AIDE-NOMBRE-MAX *
LENGTH OF TABLE-DYNAMIQUE)
MOVE LI-AIDE-TABLE(i : LENGTH OF TABLE-DYNAMIQUE)
TO W-TABLE-AIDE
write f1-enr from W-TABLE-AIDE
END-PERFORM.
FP.
move all "-" to f1-enr.
write f1-enr.
close f1.
EXIT PROGRAM.
END PROGRAM SAV.
IDENTIFICATION DIVISION.
PROGRAM-ID. SORTTAB.
LINKAGE SECTION.
01 LI-AIDE-TABLE PIC X ANY LENGTH.
01 example4.
05 ex4-tabl1 occurs 2 to 20000 depending li-aide-nombre-max.
10 LI-AIDE-TABLE-CLEF PIC X(10).
10 LI-AIDE-TABLE-INDEX PIC 9(05).
10 LI-AIDE-TABLE-AFFICH PIC X(60).
01 LI-AIDE.
05 LI-AIDE-NOMBRE-MAX PIC 9(05).
05 LI-AIDE-IND PIC 9(05).
05 LI-AIDE-FENETRE.
10 LI-AIDE-COLONNE PIC 9(02).
10 LI-AIDE-ABS PIC 9(02).
10 LI-AIDE-ORD PIC 9(02).
05 LI-AIDE-OCC-AFFICH PIC 9(02).
05 LI-AIDE-TITRE PIC X(78).
05 LI-AIDE-AIDE PIC X(78).
05 LI-AIDE-ACCEPT PIC 9(01).
05 LI-AIDE-CURSEUR PIC 9(05).
PROCEDURE DIVISION USING LI-AIDE LI-AIDE-TABLE.
main section.
set address of example4 to address of li-aide-table.
perform sort-example4
exit program.
sort-example4.
sort ex4-tabl1 ascending li-aide-table-index of example4
with duplicates.
exit.
END PROGRAM SORTTAB.
The source file is attached
Attachments:
#ServerExpress
#AcuCobol
#COBOL
#RMCOBOL
#netexpress