Marc's Place

E$SORT - Sorteren relative- of sequentieel bestand




Aanroep
 
xcall e$sort ({sortparms | optie-string}[, [bestand_in], [bestand_uit][, programma[, bericht]]])
 
Common velden vóór aanroep
*N/A
Parameters te vullen bij aanroep
sortparms (a*)
Een record dat een sortering definieert van een bestand (onder DIBOL via DBLSORTG). Zie Sorteren van Bestanden voor meer informatie.
optie-string (a*)
Een sort-definitie volgens Synergy/Language syntax. Zie de Synergy/Language manual voor meer informatie.
bestand_in (a*)
De bestandsspecificatie van het te sorteren bestand. Het vullen van deze parameter overruled de input specificatie in sortparms.
bestand_uit (a*)
De bestandsspecificatie van gesorteerde bestand. Het vullen van deze parameter overruled de output specificatie in sortparms.
programma (a*)
Indien meegegeven dan wordt het aanroepende programma gestopt en programma gestart. Gebruik geen uitgebreide padnamen in de specificatie van het programma maar een logische naam, bijvoorbeeld EXE:PRG.EXE of PGM:PRG.DBR en niet C:\PROGRAM FILES\COMMON FILES\MIJN PROGS\PRG.DBR. Dat is gewoonweg een te lange specificatie en daarbij ook zeer onzinnig.
bericht (a*)
Indien meegegeven dan wordt dit bericht door middel van een send statement aan programma gestuurd.
Parameters gevuld bij terugkeer
*N/A
Common velden gevuld bij terugkeer
*N/A
Voorbeelden
Indien via sortparms wordt gesorteerd, kan er met tijdelijke bestanden gewerkt worden. Je moet dan de devno met 1 en dev of temp in sortparms vullen met een logische naam die naar een directory verwijst, bijvoorbeeld WRK:. Indien dev leeg is, wordt de specificatie uit temp genomen. Is die ook leeg dan wordt er niet met tijdelijke bestanden gesorteerd.
 
Hier volgt een voorbeeld waarbij een selectie uit het artikelbestand op voorraad en artikelcode wordt gesorteerd:
 
xcall e$fopen (chout, outfile, %size(artikel), 'o:r')
if e$_err xcall e$quit
 
xcall e$fopen (chfdf, chart, 010, 'i')
if e$_err xcall e$quit
close chfdf
 
xcall e$ismio (11, chart, artikel)
while .not.e$_err begin
if artikel.voorraad.gt.10
xcall e$relio (4, chout, artik)
xcall e$ismio (11, chart, artikel)
end
 
xcall e$messag ('sor')
 
;* Vul PARMS
clear parms
reclen = %size(artikel)
keynum = 2
type(1) = 'D' ; Numerieke key
direct(1) = 'A'
postn(1) = 56 ; eerste positie van het voorraadveld
length(1) = %size(voorraad) ; D11 veld
type(2) = 'A' ; Alfanumerieke key
direct(2) = 'A'
postn(2) = 1 ; eerste positie van de artikelcode
length(2) = %size(code) ; A20 veld
 
close chout
xcall e$sort (parms, outfile, outfile)
 
xcall e$fopen (chout, outfile, , 'i:r') ; nu voor input
 
;* Start nu met afdrukken
xcall e$messag ('pri')
xcall e$relio (1, chout, artikel)
while .not.e$_err begin
...
...
...
 
En nu het zelfde bestand sorteren door middel van een optie-string:
 
...
...
;* Vul OPTIES
opties = "RECSIZE="+%string(%size(artikel)) +
& ", KEY=(56:" + %string(%size(voorraad)) +
& "/f,1:" + %string(%size(code)) + "/f)"
close chout
xcall e$sort (opties, outfile, outfile)
...
...
 
En nu met een door DBLSORTG gegenereerde definitie die als include in het programma is opgenomen:
 
.include 'inc:pgmsrt.def'
...
...
close chout
xcall e$sort (sortm, outfile, outfile)
...
...
© 1997- Marc Vos (and others)   -   Privacy Statement   -    Contact Me