SCR/AL1 - TOME IV. Les librairies internes
Syntax
long SC_scan_page_gn(pg, is, cmp_nb, fn, disp, stop, rev)
PAGE *pg;
ISAM *is;
int cmp_nb;
int (*fn)();
int disp, stop, rev;
Description
Lit tout le fichier is dans l'ordre de l'index cmp_nb à partir du premier record qui satisfait aux contraintes indiquées dans la page pg. Pour chaque record sélectionné, la fonction utilisateur fn est appelée, permettant un traitement quelconque de ce record. Pour les records rejetés, la fonction est également appelé, avec un paramètre indiquant que le record est rejeté.
Si disp n'est pas nul, un compteur indiquant le nombre de records lus et sélectionnés apparaît dans le bas de l'écran. Ce compteur est rafraîchi toutes les disp lectures. Si disp vaut 0, ce compteur n'apparaît pas.
Si stop vaut 1, la frappe de n'importe quelle touche en cours de traitement arrête celui-ci et il est demandé à l'utilisateur s'il faut ou non continuer. Si stop vaut 0, le processus se poursuit jusqu'à la fin du fichier.
rev permet, s'il vaut 1, d'inverser la sélection de records : tous ceux qui répondent aux critères sont rejetés, tous les autres sont sélectionnés.
La PAGE pg peut contenir un nombre quelconque de champs de l'ISAM is. Pour chaque champ de is, on trouvera 0, 1 ou 2 occurences dans la PAGE.
La sélection des records s'effectue comme suit : tous les champs de l'ISAM présents dans la PAGE servent de "masque", de critère de sélection.
Soit un champ de l'ISAM.
La sélection s'effectue en ne retenant que les records qui satisfont à TOUS les critères définis dans la PAGE pg.
La fonction utilisateur fn est du type suivant :
int fn(is, nbread, nbfound, success)
ISAM *is;
long nbread, nbfound;
int success;
{
return(0);
}
Si le pointeur de fonction fn est nul, il n'y a pas d'appel de fonction.
La fonction fn est appelée après la lecture de chaque record, sélectionné ou non. De plus, elle est appelée après le dernier record, permettant au programme de fermer des fichiers, de terminer une impression, etc.
Valeur de retour de fn
La fonction fn peut retourner 3 valeurs différentes :
Exemple
PrintClients_1(is, nbread, nbfound, success)
ISAM *is;
long nbread, nb_found;
int success;
{
switch(success) {
case 2 :
PR_print("Total : %ld clients\n", nbfound);
return(0);
case 1 :
if(is_clients_MONTANT < 1000) return(1);
if(nbfound % 55 == 1) {
if(nbfound > 1) PR_formfeed();
PR_string("Nom Chiffre Affaire\n\n");
}
PR_string("%15.15s %ld FB\n",
is_clients_NAME, is_clients_MONTANT);
return(0);
default : return(0);
}
}
PrintClients()
{
PG_edit_window(p_clients);
if(SCR_LKEY != SCR_F10) return;
PR_select(pr1);
SC_scan_page(p_clients, is_clients, 0, PrintClients_1, 1);
PR_send();
}
Valeur retournée
le nombre de records sélectionnés (long).
Voir également
SC_scan_isam()
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be