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 :

Contraire Fonction DANS


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut Contraire Fonction DANS
    Bonjour,

    Je cherche à faire le contraire de la fonction DANS() sur Windev

    Une idée ?

    Merci !

  2. #2
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Mettre un "PAS" dans ta condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI PAS iTaValeur DANS (iVal1,iVal2) ALORS
     
    FIN
    Google est ton ami !

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    Bonjour,

    Je ne connais pas cette fonction et je ne la trouve pas dans l'aide.
    Peux-tu mettre un lien de l'aide ?


    Merci Leon pour cette syntaxe (et non une fonction) de SI que je ne connaissais pas.

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    Je suis d'accord avec la solution de LeonCosnyd mais je préfère utiliser _DANS_ ce qui évite de tester toutes les valeurs.

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  5. #5
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    http://doc.pcsoft.fr/fr-FR/?1512003&...teurs_logiques

    (J'avoue que cela n'est pas beaucoup documenté...)
    Google est ton ami !

  6. #6
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour Lo²


    Tu trouves les explications dans la page "Opérateurs de comparaison" : http://doc.pcsoft.fr/fr-FR/?1512006&...de_comparaison

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    merci Leon et drs57 pour les liens

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Merci pour vos réponses rapides

    Effectivement, la doc est pas très complète, je l'avais déjà vu

    Je mettais pas le "PAS" au bon endroit.

    Merci !

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Donc tout le monde a raison, pas de souci (surtout dsr57 concernant _DANS_ qui est une version optimisée de DANS).
    Par contre, de mon point de vue, on peut pas accuser la doc à-tout-va.... IN, NOT IN, IF, IF NOT, WHILE, WHILE NOT.... c'est de l’algorithmique... après WLangage, PHP, Javascript, C# ou C++ même combat.
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  10. #10
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par matheous Voir le message
    Bonjour,

    Je cherche à faire le contraire de la fonction DANS() sur Windev

    Une idée ?

    Merci !
    Bonjour,
    Totalement contre l'utilisation de PAS et à fond pour l'utilisation de _DANS_


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    lnIndex is int
    lnIndex = 2
     
    IF (lnIndex _IN_ (7,8,27,2)) = True THEN
    	Info("Valeur trouvé")
    ELSE	
    	Error("Valeur introuvable")
    END

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    Citation Envoyé par tunizar Voir le message
    Totalement contre l'utilisation de PAS
    Pour quelle(s) raison(s) ?

  12. #12
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Je pense que chacun a ses habitudes et ses repères en programmation. Certains préféreront utiliser un "PAS", d'autres préféreront mettre un "= faux" à la fin.
    Le principal est de bien se repérer dans le code et l'uniformiser si l'on travaille en équipe.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI PAS tabMonTableau..Vide ALORS
     
    FIN
    On peux lire le code ainsi : "Si mon tableau n'est pas vide" ! Cela devient presque du langage naturel.

    contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI tabMonTableau..Vide = faux ALORS
     
    FIN
    Qui correspond à une syntaxe plus académique en programmation où l'on compare une valeur avec une autre.


    Je ne pense pas qu'il y ai de bonnes ou de mauvaises syntaxes.
    Google est ton ami !

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Disons blanc bonnet et bonnet blanc, schtroumpfbouchon et tirebouschtroumpf....

    En revanche _DANS_ est réellement différent de DANS, il n'est pas ici question d'esthétique du code.
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  14. #14
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Je ne remet pas en question l'utilité des "_x_". Cela a un réel impact sur l’exécution du code. Je l'utilise couramment sur tout ce qui est ET, OU, A ! Je me demande même parfois ce n'est pas cette syntaxe qui devrait être par défaut !
    Google est ton ami !

  15. #15
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    Je te rejoins complètement sur cette syntaxe par défaut

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    J'ai bien compris ! pardon si je redis ce que tu disais.... je voulais placer tirebouschtroumpf....

    Le comportement de ET, OU, A et DANS n'est pas révisé pour des raisons (je suppose) de rétro-compatibilité mais je suis d'accord pour (ou redire ) que c'est un choix regrettable....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Pour la fonction DANS, il est presque obligatoire d'écrire _DANS_ du coup ?

    Puisque le but de cette fonction sert a chercher une valeur dans une variable, une fois que celle-ci est trouvée la condition est vrai

  18. #18
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Ce n'est pas "obligatoire" mais conseillé si tu souhaites optimiser tes performances.

    Si tu met DANS :
    Windev va faire la comparaison de toutes les valeurs puis seulement après il va déterminer si la condition est vraie ou fausse

    Si tu met _DANS :
    A la première comparaison qui est vraie, windev juge qu'il n'est pas nécessaire de continuer à comparer les autres valeurs et termine donc son opération directement = gain de temps

    Pour répondre à ta question moi je répondrais OUI ! (EDIT : Mon OUI s'applique uniquement à la fonction DANS !)


    Par contre cela ne doit pas être systématique pour les A, ET, OU car cela dépend de ce que tu souhaites faire.

    Par exemple tu as un formulaire de contact (tout bêtement). Au clic sur le bouton de validation de celui-ci tu veux vérifier que certains champs sont bien renseignés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROCEDURE procVérifieFormulaire(sNomChamp est une chaine)
         SI {sNomChamp,indChamp} ~= "" ALORS
              {sNomChamp,indChamp}..CouleurFond = iRougeClair
              RENVOYER(Faux)
         SINON
              RENVOYER(Vrai)
         FIN
    FIN
     
    SI procVérifieFormulaire(SAI_NOM..Nom) ET procVérifieFormulaire(SAI_PRENOM..Nom) ET procVérifieFormulaire(SAI_TELEPHONE..Nom) ALORS
         // Validation du formulaire
    FIN
    Ceci est l'exemple type d'un code que j'ai pu observer dans un projet existant de ma société...

    Dans le cas précédent je souhaite que toutes les conditions soient exécutées car en plus de faire la comparaison la fonction va mettre en évidence les champs à remplir. Si je met des _ET_ et que le champ de saisie SAI_NOM est vide, il n'y aura que lui avec une couleur de fond, alors que les autres peuvent aussi être vide.

    Je ne vais donc pas aujourd'hui faire une recherche sur tout le projet de "ET" pour le remplacer par "_ET_" pour ce genre de situation !
    Google est ton ami !

  19. #19
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    L'ensemble des intervenants sont d'accord sur l'utilisation de l'opérateur _DANS_ pour des raisons d'optimisation. Mais je souhaite revenir sur un détail des interventions

    Citation Envoyé par tunizar
    Totalement contre l'utilisation de PAS et à fond pour l'utilisation de _DANS_
    Citation Envoyé par Lo²
    Citation Envoyé par tunizar
    Totalement contre l'utilisation de PAS
    Pour quelle(s) raison(s) ?
    Je suis a moitié d'accord avec tunizar sur l'utilisation de PAS et souhaite apporter une réponse à l'interrogation de Lo². La moitié ou je suis d'accord c'est pour des raisons d'optimisation, car sauf erreur de ma part la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI PAS iTaValeur DANS (iVal1,iVal2) ALORS
    entraine deux tests, le premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iTaValeur DANS (iVal1,iVal2)
    entrainant un résultat de type booléen, et le deuxième
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    résultat du premier =faux
    Nous avons donc deux tests alors que l'on pense en codé que un. La partie dans laquelle je m'interroge et je suis moins d'accord est : comment coder le cas ou seulement les valeurs non comprises dans la suite nous intéressent, WinDev n'a pas d’opérateur de comparaison PASDANS ou _PASDANS_, donc si on reprend un exemple en prenant en compte l'aspect optimisation on devrait codé notre algorithme comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI iTaValeur DANS (iVal1,iVal2) ALORS
    //Ne rien faire 
     SINON
     li_compteur++
    FIN
    Mais comment ce code sera analysé, jugé par un collègue ?
    Quel choix faire ?


    Voilà pour mon intervention, bon dev à tous
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  20. #20
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    J'utilise très souvent PAS mais je ne m'étais pas posé la question sur les 2 tests effectués.

    Merci dsr57 pour cette éclaircissement, même si une explication de tunizar aurait été pas mal.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/11/2004, 17h15
  2. Enchainer des fonctions dans un onclick d'un bouton
    Par jpg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2004, 16h51
  3. [VBA-E] Ajouter des fonctions dans Excel
    Par Clezio dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2004, 01h18
  4. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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