Modifier

On en est déjà au cinquième jour, donc, à la cinquième astuce.

Est-ce qu'il vous arrive de faire des HSauvePosition et des HRetourPosition ? Personnellement, je les utilise de temps en temps. Et ça m'est déjà arrivé d'oublier de faire le HRetourPosition.

J'ai réfléchi à comment résoudre ce problème et j'ai pondu ces deux fonctions :

Une pour ne pas récupérer de résultat :

PROCEDURE ExecuterEtSauvegarderContexteSansRésultat(p est une Procédure, *)
PilePosition est une Pile d'entiers

POUR i = 2 _A_ MesParamètres..Occurrence
    Empile(PilePosition, HSauvePosition(MesParamètres[i]))
FIN

p()

PositionSauvegardée est un entier
TANTQUE Dépile(PilePosition,PositionSauvegardée)
    HRetourPosition(PositionSauvegardée)
FIN

Et une pour récupérer un résultat :

PROCEDURE ExecuterEtSauvegarderContexteAvecRésultat(p est une Procédure, *)
PilePosition est une Pile d'entiers

POUR i = 2 _A_ MesParamètres..Occurrence
    Empile(PilePosition, HSauvePosition(MesParamètres[i]))
FIN

soit Résultat = p()

PositionSauvegardée est un entier
TANTQUE Dépile(PilePosition,PositionSauvegardée)
    HRetourPosition(PositionSauvegardée)
FIN

Renvoyer Résultat

Elle me permet d'exécuter une procédure et de sauvegarder le contexte avant et après la procédure.

Je vous propose l'exemple suivant : on souhaite compter le nombre de lignes d'une commande. Imaginons que l'on travaille avec les deux fichiers Commande et LigneCommande, mais on souhaite pas perturber le parcours :

PROCEDURE CompterLigne(NumCommande)
    PROCEDURE INTERNE iCompterLigne()
        NombreLignes est un entier = 0
        SI HLitRecherchePremier(Commande, Num, NumCommande) ALORS
            HLitRecherchePremier(LigneCommande, Num, NumCommande)
            TantQue HTrouve(LigneCommande)
                NombreLignes ++
                HLitSuivant(LigneCommande)
            FIN
        FIN
    FIN

    Renvoyer ExecuterEtSauvegarderContexteAvecRésultat(iCompterLigne, "Commande", "LigneCommande")   

Et voilà.

J'espère que cette petite astuce vous inspirera pour d'autres codes. La sauvegarde de contexte ne s'applique pas seulement aux fichiers HFSql.

Bonne journée à tous !

Article suivant Article précédent

Blog Comments powered by Disqus.