Accueil du site > Les articles > Optimiser la recherche de postes dans une table Adélia (valable aussi en (...)
Version à imprimer Enregistrer au format PDF

Optimiser la recherche de postes dans une table Adélia (valable aussi en RPG).

mardi 18 mai 2004, par Didier Encinas Visites  1577

Vous qui manipulez quotidiennement des tableaux de 9999 enregistrements ("au cas où", "je sais pas combien y a d’enreg. à mettre dedans", "faut voir grand", "on a la place" ou éventuellement mais rare "j’en ai besoin") et qui ensuite lancez des :

   I = 1
   RECHERCHE = var tab(i)
   SI *TROUVE = '1'


Pensez : UN TABLEAU SE CHARGE PAR LA FIN

Je m’explique :

L’ordre Recherche d’Adélia (et donc du GAP) accepte un indice de départ de la recherche (i) mais pas d’indice de fin. La recherche se fait toujours jusqu’à la fin du tableau. Plus le tableau est grand, plus la recherche sera longue, même si le nombre de postes alimentés est restreint ; c’est le nombre total de postes qui est important.

Pour optimiser les programmes, il suffit donc de charger le tableau par son dernier indice (9999), et ensuite de le lire à partir du plus petit indice chargé.

Ceci fonctionne pour tous les tableaux, quelle qu’en soit la taille.

Petit source pour y voir plus clair :

Boucle de chargement "bateau" : Tableau de 9999 postes

I = 10000                              on pourrait partir de 9999
LIRE fichier                           et décrémenter à posteriori,
TANT_QUE fichier EXISTE ET I > 1       mais on serait décalé de 1
   I = I - 1                          poste à la fin
   TAB_CODE(I) = code
   TAB_LIBELLE(I) = libellé
   LIRE_SUIVANT fichier
REFAIRE
I_MAX = I

Recherche d’un libellé dans le tableau :

I = I_MAX                             au lieu d'un I = 1
RECHERCHE = x_code TAB_CODE(I)        la suite reste standard
SI *TROUVE = '1'
   x_libellé = TAB_LIBELLE(I)
SINON
   x_libellé = 'code inconnu'
FIN