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)   -   Privacy Statement   -    Contact Me

On this website, Google Analytics is used to track visitor statistics. These are anonymised data about the number of visitors, which pages they visit on this site, from which regions they visit, which web browsers they use, etc.. You will also see non-personalised ads via Google AdSense. Cookies from Paddle or Paypal are placed when you click on a 'Buy now!' or 'Donate!' button, and possible cookies from Disqus when you use that system to comment on one or more blogposts.
Privacy Statement