Software development, photography, jokes, ....

Sites by me

 
tas-logoTransportation Administration System
snoezelkussen-logo-kleinstSnoezelkussens voor verstandelijk gehandicapten
ikzoekeenbegeleider-logoBegeleiders voor gehandicapten
Laat uw hond het jaarlijkse vuurwerk overwinnen
logo 50x50Hey Vos! Je eigen naam@vos.net emailadres?
Kunst in huis? Nicole Karrèr maakt echt bijzonder mooie dingen
nettylogo2Kunst in huis? Netty Franssen maakt ook bijzonder mooie dingen
Salarisadministratie en belastingadvies bij De Zaak Loont
Zutphense Bomenstichting

Hosting Favorites

 
ANU Internet Services
XelMedia .internet Services
register.com

Blogroll

 
Bomenstichting
LassoSoft
MacFreak
Quality that computes
The Economy of Motion
Wheel 2.0
IntrAktv



Website Hosting bij Xel Media

Marc's Place

E$NXTKEY - Eerstvolgende sleutelwaarde bepalen




Aanroep
 
xcall e$nxtkey (sleutelwaarde[, lengte])
 
Common velden vóór aanroep
*N/A
Parameters te vullen bij aanroep
sleutelwaarde (a*)
De sleutelwaarde waarvoor de eerst-eropvolgende waarde berekend moet worden.
lengte (d*)
De lengte van de sleutelwaarde. Indien niet meegegeven, wordt de lengte van sleutelwaarde gebruikt.
Parameters gevuld bij terugkeer
sleutelwaarde (a*)
De sleutelwaarde waarvoor de eerst-eropvolgende waarde berekend is. Deze berekening vindt als volgt plaats:
  • Indien de lengte van de tekens < lengte van het veld of aan lengte, dan wordt een uitroepteken aan de tekens toevoegd. Bijvooebeeld een klantcodeveld van 10 posities. Het is gevuld met "EARTH". De eerstvolgende sleutelwaarde is "EARTH!"
  • Indien de lengte van de tekens = lengte van het veld of >= lengte, dan wordt het teken op de laatste positie met ASCII 1 verhoogd. Stel een klantcodeveld van 5 posities. Het is gevuld met "EARTH". De eerstvolgende sleutelwaarde is "EARTI".
Met de nieuwe waarde kan opnieuw in een ISAM gepositioneerd worden.
Common velden gevuld bij terugkeer
*N/A
Voorbeelden
Deze routine is bij uitstek geschikt voor statistiekbestanden. Dat zijn vele records en wanneer alle records van bijvoorbeeld een klant overgeslagen moeten worden, is het onverstandig deze sequentieel af te werken. Dat kunnen wel duizenden nutteloze leesacties zijn. Door deze routine te gebruiken, krijg je een waarde waarmee je in één keer over al die duizenden klant-records heen springt, direct naar de eropvolgende klant:
xcall e$nxtkey (klant.key)
xcall e$ismio (2, chklt, klant, klant.key)
Hieronder een voorbeeld met plaats/postcode. Eerst springen we steeds naar de volgende postcode binnen dezelfde plaats. Daarna in één keer naar de volgende plaats:
key, a40 ; plaats(1:30) + postcode(1:10)
 
.proc
 
while ... begin
xcall e$nxtkey (key) ; Volgende plaats / postcode
xcall e$ismio (2, chhis, hist, key)
 
if ... begin
xcall e$nxtkey (key, 30) ; Volgende plaats
xcall e$ismio (2, chhis, hist, key)
end
 
key(01:30) = hist.plaats
key(31:10) = hist.postcode
 
...
...
end
 
.end
Bij de eerste zal het laatste teken van de postcode worden opgehoogd of aangevuld met een uitroepteken:
"DORDRECHT 3312 KT" wordt
"DORDRECHT 3312 KT!"
Bij de tweede aanroep, wordt naar de volgende plaats gesprongen:
"DORDRECHT 3312 KT" wordt
"DORDRECHT! 3312 KT"
De tekens achter het uitroepteken bij de plaatsnaam doen er in in dit geval geheel niet toe.
© 1997- Marc Vos (and others) Contact Me