IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Sortie de procédure itérative


Sujet :

WinDev

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut Sortie de procédure itérative
    Bonjour à tous et meilleurs vœux
    Mon prog s'inspire de https://blogs.pcsoft.fr/fr/extraire-...e/353/read.awp
    Sur condition j'aimerais pouvoir arrêter le traitement mais je ne saiis pas comment sortir d'une procédure qui s"appelle elle-même.

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Il suffit de créer un cas de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI ConditionSortie ALORS
         RETOUR
    SINON
         //On continue le traitement
    FIN
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    L'exemple idéal pour une procédure récursive, c'est la fonction factorielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fonction factorielle (n)
    si n>= 2 alors 
      renvoyer n*factorielle (n-1) 
    sinon
      renvoyer n 
    fin
    En fait, souvent, pour les procédures récursives, c'est dans la ligne 'Renvoyer' qu'on a un appel à la fonction elle-même.
    Il faut donc avoir un cas particulier, où on renvoie une constante, et non un appel à la procédure récursive.

    Pour plus d'aide, il faut que tu montres ce que tu as dans ton cas. ...
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    @Voroltinquo : merci de ta réponse mais ta solution ne suffit pas

    @tbc92 : Mon prog s'inspire de https://blogs.pcsoft.fr/fr/extraire-...e/353/read.awp

    merci de votre aide

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Dans ce lien, on a une configuration semblable. Si l'élément à traiter est de type wlVariantTableau , la procédure s'appelle elle-même, pour chaque élément du tableau.
    Et quand l'élément est de type autre , alors la procédure affiche la valeur, mais n'appelle aucune sous-procédure.

    Si on redit la même chose avec le langage 'parcours d'un arbre' : Quand on traite un élément de type feuille, on affiche la feuille, et quand on parcours un élément de type autre, on appelle une procédure parcours_sous_éléments().

    Si tu as des difficultés, oublie le contexte Json pendant un moment, et fais le même exercice sur ce qui est parcours d'arbre (arbre généalogique par exemple).
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    la fonction ChaiîneOccurrence(dbgInfo(dbgPile), RC) donne la "profondeur" de récursivité. Puis l'utiliser pour arriver à mes firs ou dois-je tester chaque retour de fonction et faire un RETOUR sur une valeur particulière?

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Je pense que la piste n'est pas bonne.
    Prenons l'analogie avec un arbre généalogique. Tu as un fichier avec plein de relations pere-fils. Et tu veux un arbre, ou plus simplement un fichier avec tous les descendants de Robespierre. Avec ta fonction chaineoccurence(RC), tu vas pouvoir retrouver si un individu est un descendant de la 5ème génération, ou de la 10ème génération. Mais on s'en moque.
    Le critère pour arrêter, ce n'est pas de savoir si cet individu est de la 10ème génération, mais de savoir que cet individu n'a pas d'enfant.

    A la limite, on n'a même pas besoin d'un code spécifique pour s'arrêter, et tu es peut être dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure arbre_genealogique(ancetre , numero_de_generation  )
    pour chaque enfant de ancetre
        trace (nom de l'enfant  , numero_de_generation )
        arbre_genealogique(enfant , numero_de_generation+1)
    fin
    On n'a aucun code particulier pour arrêter, mais ça marche.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    Je comprends bien ton discours, mais l"exemple d'un arbre n'est pas pertinent car il est "propre" au contraire de la page JSon que je traite (provenance SNCF) un peu n'importe quoi (voir pj) . Je dois donc commence mon traitement à un endroit et le finir à un autre d'où besoin de sortir des itérations

Discussions similaires

  1. [9.3] Résultat multiple en sortie de procédure ou de fonction
    Par joel74 dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/02/2015, 17h53
  2. [Débutant] List qui se vide en sortie de procédure
    Par FruitSellers dans le forum ASP.NET
    Réponses: 9
    Dernier message: 19/03/2014, 20h32
  3. Réponses: 1
    Dernier message: 22/02/2009, 19h34
  4. Réponses: 1
    Dernier message: 22/06/2006, 11h08
  5. Réponses: 5
    Dernier message: 24/10/2005, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo