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

VB.NET Discussion :

[2.0] comportement étrange sur condition sur string.indexOf


Sujet :

VB.NET

  1. #1
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut [2.0] comportement étrange sur condition sur string.indexOf
    Salut,

    J'ai une procédure dans laquelle j'appelle une autre procédure selon le nom de fichier. Je teste donc le nom de fichier avec indexOf comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Shared Sub verifierRetour(ByVal fichier As String)
    	Dim s1 As Integer = fichier.IndexOf("_1.txt")
    	Dim s2 As Integer = fichier.IndexOf("_2.txt")
    	If s1 > -1 Then
    		methode1(fichier)
    	End If
    	If s2 > -1 Then
    		methode2(fichier)
    	End If
    End Sub
    Le problème est que la condition avec s1 se comporte normalement, mais methode2 est toujours exécuté mêe quand s2 est très clairement égal à -1.
    Savez-vous d'où ça peu venir?

    Merci par avance.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    Plutôt surprenant ...
    Si Methode2 est executée, S2 est forcément <= -1 ...
    En debug, tu n'as quand même pas vu ton appli rentrer dans le IF alors que la condition était false ???

  3. #3
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Citation Envoyé par Totanne Voir le message
    En debug, tu n'as quand même pas vu ton appli rentrer dans le IF alors que la condition était false ???
    Et pourant si!

    D:\NOTIFICATION\TMP\XXXXXXX_1_3_3_1.txt
    s1 = 33 passe dans le if
    s2 = -1 passe dans le if (pas normal)

    D:\NOTIFICATION\TMP\XXXXXXX_1_3_3_2.txt
    s1 = -1 passe pas dans le if (normal)
    s2 = 33 passe dans le if

    et ainsi de suite invariablement!
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si c'est une appli ASP.NET, tu as essayé de recompiler ? Parce que ton code est OK a priori, chez moi il fonctionne bien...

  5. #5
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    C'est un service windows. J'ai regénéré l'appli mais l'erreur est toujours là!
    Le problème intervient toujours même si je change la seconde condition en Le comportement reste toujours le même.
    En debug, toutes les valeurs sont cohérentes et correctes, mais je rentre tout de même dans la condition! La méthode n'est réellement composée que de ces quelques lignes, s1 et s2 sont nulles part ailleurs dans le projet et sont du bon type.
    C'est hallucinant!
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Meme si a priori ca n'a rien a voir, si tu remplaces ta recherche IndexOf par un truc comme : s2 =instr(fichier,"_2.txt"), ca fait pareil ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  7. #7
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Shared Sub verifierRetour(ByVal fichier As String)
    	Dim s1 As Integer = fichier.IndexOf("_1.txt")
    	Dim s2 As Integer = fichier.IndexOf("_2.txt")
    	Dim s3 As Boolean = True
     
    	If s1 > -1 Then
    		methode1(fichier)
    	End If
    	If Not s3 Then
    		methode2(fichier)
    	End If
    End Sub
    methode2() est toujours exécutée alors que je test sur "Not s3" (s3 valant true).
    J'ai beau modifier les conditions, l'exécution reste la même. Connaîtriez-vous des pistes à explorer? J'ai généré la solution, sans qu'aucune erreur ne soit retournée.
    Je rappelle, que je suis amateur en .net.

    Merci.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  8. #8
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    OhMonBato : aucun changement.

    De plus, pour appeler verifierRetour() j'utilise déjà ce genre de méthode et ça fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each fichier As String In My.Computer.FileSystem.GetFiles(My.Settings.cheminDossierTmp)
    	If fichier.IndexOf("ZZZZZZ") > -1 Then verifierRetour0(fichier)
    	If fichier.IndexOf("XXXXXXX") > -1 Then verifierRetour(fichier)
    Next
    Le problème est forcément ailleurs, mais je n'ai pas assez d'expérience pour le pointer du doigt.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  9. #9
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Question bete : ta methode2 ne serait pas appelee a l'insu de ton plein gre par la methode1 ?
    En utilisation pas a pas, le test passe vraiment ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  10. #10
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Question bete : ta methode2 ne serait pas appelee a l'insu de ton plein gre par la methode1 ?
    Non, non, je viens de vérifier, ça aurait été un non-sens dans mon cas, mais j'ai tout de même vérifier.
    Citation Envoyé par OhMonBato Voir le message
    En utilisation pas a pas, le test passe vraiment ?
    J'utilise bien le pas à pas et la petite ligne jaune passe constamment dans ma condition. Je le sais bien, j'ai envie de taper mon écran à chaque fois que ça se produit.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  11. #11
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Shared Sub verifierRetour(ByVal fichier As String)
    	Dim s1 As Integer = fichier.IndexOf("_1.txt")
    	Dim s2 As Integer = fichier.IndexOf("_2.txt")
     
    	If s1 > -1 Then
    		methode1(fichier)
    	End If
     
    End Sub
    Ce code fait que methode1() est toujours exécutée...
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  12. #12
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Afin de prouver ma bonne foi, vous pouvez regarder la copie d'écran.
    Images attachées Images attachées  
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  13. #13
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    desole d'insister mais avec ce test ca fait quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Instr(fichier,"_2.txt") then
      methode2(fichier)
    End If
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  14. #14
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Instr(fichier,"_2.txt") then
      methode2(fichier)
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Instr(fichier,"_2.txt")>-1 then
      methode2(fichier)
    End If
    Me donnent le même comportement.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par franculo_caoulene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Shared Sub verifierRetour(ByVal fichier As String)
    	Dim s1 As Integer = fichier.IndexOf("_1.txt")
    	Dim s2 As Integer = fichier.IndexOf("_2.txt")
    	Dim s3 As Boolean = True
     
    	If s1 > -1 Then
    		methode1(fichier)
    	End If
    	If Not s3 Then
    		methode2(fichier)
    	End If
    End Sub
    methode2() est toujours exécutée alors que je test sur "Not s3" (s3 valant true).

    Alors là quand même y a un truc louche... c'est le CLR qui pète les plombs on dirait ?!

  16. #16
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Je pense en effet à quelque chose dans le genre, ou un truc que je fais mal à la compilation, un paramètre que je ne connais pas qui aurait une mauvaise valeur...
    Ca fait penser aux problèmes de cache des navigateurs internet. Je ne vois pas comment chercher une solution au problème là.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  17. #17
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Je sais pas trop si ca fera avancer le schmilblick mais tu peux ajouter apres "if s2 > -1 then" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debug.Print(s2 > -1)
    Debug.Print(s2 = -1)
    Juste pour voir et se faire encore un peu plus mal a la tete...
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  18. #18
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Je sais pas trop si ca fera avancer le schmilblick mais tu peux ajouter apres "if s2 > -1 then" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debug.Print(s2 > -1)
    Debug.Print(s2 = -1)
    Juste pour voir et se faire encore un peu plus mal a la tete...
    Je le dis que je suis un amateur mais on m'écoute pas
    J'ai ajouté les Debug.print() mais je l'utilise comment après?
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  19. #19
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Et bien quans tu executeras ton programme, tu verras True ou False s'afficher dans la fenetre de visualisation immediate, que tu peux activer avec CTRL + G ou dans le menu debug.
    C'est une fenetre qui s'affiche au meme niveau que la fenetre de liste d'erreur.

    Sinon autrement, verifie aussi si Option Strict et Option Infer sont On ou Off, je ne vois pas dans ce cas particulier en quoi ca influencerait mais a tout hasard...
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  20. #20
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Les fenêtres proposées au moment du débugage sont :
    - points d'arrêt
    - espion
    - variables locales
    - pile des appels
    - threads

    ctrl + G m'ouve la fenêtre pour aller directement à la ligne.

    option explicit = on
    option strict = off
    option compare = binary

    Ce sont les valeurs par défaut, ou du moins je ne les ai pas volontairement modifiées. Qu'est-ce que Option Infer?
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

Discussions similaires

  1. Un comportement étrange (de plus ?) sur variable
    Par Guigsounet dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/07/2010, 20h14
  2. Comportement étrange d'IE sur interprétation code d'initialisation
    Par ephemere dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/07/2009, 16h32
  3. Réponses: 1
    Dernier message: 23/03/2009, 20h42
  4. Comportement étrange sur un bulleted list
    Par stroumfs dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/10/2008, 15h51
  5. Comportement étrange ksh sur linux
    Par hugo123 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 09/08/2006, 10h55

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