Problème de variable qui se réinitialise [Résolu]

Signaler
Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008
-
Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008
-
Bonjour, voila j'ai un petit problème avec cet algo pourtant simple :)
il sert a rechercher une date en cherchant dans une chaine les caractères de séparation  : /
J'avoue que je débute en VB et que je suis plus habitué au C mais je dois faire ça par la force des choses :)
Le problème est que i semble revenir systématiquement a sa valeur initiale à chaque appel de la fonction ( elle est appelée o moins 10 à 15 fois )  

Je suis sur que cela doit être un détail mais à force d'être dessus, je ne vois plus très bien ce qui ne va pas.
Merci de votre aide :)

  Public Function date_detect(ByVal trame As String, ByVal i As Integer)
        



        While i < Len(trame)




            If Mid(trame, i, 1) "/" And Mid(trame, i + 3, 1) "/" Then '
                Return i
            Else
                i += 1
            End If



        End While



        Return -1



    End Function
[mailto:Am@urysme
]

10 réponses

Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008

Nouvel essai, nouvel echec, voici un morceau de mon code qui ne veut pas marcher ...

[...]

If
check 918 Then<?xml:namespace prefix o ns = "urn:schemas-microsoft-com:office:office" /??>






'Extraction de l'IP






IP = (CUInt(buff(i + 35)) & "." & CUInt(buff(i + 36)) & "." & CUInt(buff(i + 37)) & "." & CUInt(buff(i + 38)))





trame = CUInt(buff(41))






 















ElseIf check = 946 Then






'Extraction de l'IP






IP = (CUInt(buff(i + 33)) & "." & CUInt(buff(i + 34)) & "." & CUInt(buff(i + 35)) & "." & CUInt(buff(i + 36)))
trame = CUInt(buff(i + 38))

Else





MessageBox.Show("erreur de Trame", "Erreur")






End
If







 



date_detect(test, i)'test = readalltext(fichier)

Pour ce qui concerne la fonction date_detect, j'ai :





Public

Sub date_detect(ByVal trame AsString, ByRef i AsInteger)






 







Do
While Mid(trame, i, 1) <> "/"And Mid(trame, i + 3, 1) <> "/"Or i < Len(trame)





i += 1






Loop







 







End
Sub



La valeur de i n'a pas l'air de changer pour autant ...
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour

à la place de "ByVal i", utilises Byref.

Sinon, ta fonction est bizzard, je te conseil de typer ta fonctio (quel est le type retournée), et à quoi sert-elle ?

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

normal...., tu as passé ton i BYVAL

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
(pas possible de faire plus synchro NHenry ^^)
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour

Rare, message posté en même temps, même seconde.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008

[mailto:Am@urysme
Am@urysme
]
Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008

ok, je vais assayer le byref mais je l'ai déja fait tout a l'heure (peut-etre mal fait )

Sinon, cette fonction recherche une trame qui commence par une date dans un fichier.
Et je ne comprends pas pourquoi le byref puisque lors de l'appel, je spécifie une valeur à i

appel :
date_detect(trame,i)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
date_detect va te renvoyer le bon I, puisque c'est une fonction (non typée....)
seulement tu ne récupères pas le retour, tu passes juste I en paramètre

et comme I est byval, si I=3 et I= 6 dans la fonction, après retour :
fonction retourne 6
I retourne toujours 3

ps : ton code est classé en VB6, c'est du DotNet
ps : mid n'existe pas en dotnet, il faut utiliser substring....
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
9
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
4 juin 2008

Je crois avoir compris mais encore un doute.
la fonction retourne 6 alors si je fais dans mon appel
i=date_detect(trame,i)
puisque la fonction retourne 6, i devrait valoir 6 non ?

Désolé, c'est pas mon habitude de faire le boulet, mais je comprends vrément moyennement :/
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
soit une sub BYREF (puisque plus d'utilité de faire un return), soit en effet tu récupères mais il faut TYPER ta fonction....
essaye :)