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 6 et antérieur Discussion :

do while prend beaucoup de temps


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut do while prend beaucoup de temps
    salut tous le monde
    j'ai fait cette function pour coder les lettre arabe en ascw sauf que la boucle do while prend boucoup de temps meme si le texte ne contient que 100cacactere ce qui est peut je croit pour que ca prend plus que 15 min

    merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub convert()
    Do While i.Caption < Len(a.Text) + 1
    m = Mid(a.Text, i.Caption, 1)
    If m Like "[A-Z]#[a-z]#[0-9]" Then 
    c = m
    Else
    c = "&#" & AscW(m) & ";"
    End If
    b.Text = b.Text & c
    i.Caption = i.Caption + 1
    Loop
    End Sub

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    déjà :

    - Pourquoi diable passer par le caption d'un contrôle et non utiliser directement une variable ?
    - un caption est de surcroît une chaîne de caractères et non un numérique ... et alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While i.Caption < Len(a.Text) + 1
    n'est pas ce qu'il y a de plus orthodoxe ...
    Au bout du compte :

    on ne lit qu'une fois a.text (dans toto, par exemple)

    dim toto as string
    toto = a.text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 1 to len(toto)
      m = mid(toto,i,1)
      etc...
    next
    et regarde donc ce que fait ceci, qui utilise un tableau d'octets et est donc plus rapide que Mid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
     toto = "bonjour ami"
     Dim titi() As Byte
     titi = StrConv(toto, vbFromUnicode)
     For i = 0 To UBound(titi)
       MsgBox titi(i) & " =====>> " & Chr(titi(i))
     Next
    End Sub
    analyse, comprends et sers-t-en ....

  3. #3
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Pour ajouter à ucfoutu (Salut), car j'etais en train de rediger ce qui suit.

    j'ai fait cette function
    Une fonction renvoie le résultat dans son nom, là tu nous as fait une Sub.

    Malgré le temps important, ta sub te permet-elle de convertir correctement la chaîne?

    Un Doevents, dans une boucle et une bonne précaution (mais ne fait pas gagner de temps).

    Plutôt que d'incrémenter par le biais de i.Caption, il serait plus propre de le faire par une variable de type Integer, rien ne t'empêchant de l'afficher dans un label , un léger gain en temps est même envisageable, VB n'ayant pas a interpréter un String (i.Caption) qu'il converti en Integer pour lui ajouter le +1.
    En règle générale, passes par des variables typées plutôt que par des objets, ceci étant valables pour m = Mid(a.Text, i.Caption, 1), m = Mid(Chaine1, i, 1), Chaine1 étant de type String et i de type Integer.

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Heu, je comprends pas trop pourquoi tu utilises un do while, une for / next serait largement suffisante , non ?

    De plus, il serait plus judicieux de faire une fonction, a mon avis, ce qui rendrait la routine plus polyvalente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Function Convert(Text as String) as String
      Dim iPnt as Integer
      Dim Char as String
      Dim strTemp as String
      For iPnt = 1 to Len(Text)
         Char = mid(Text ,iPnt ,1)
         If Char Like "[A-Z]#[a-z]#[0-9]" Then 
            strTemp = strTemp & Char
         Else
           strTemp = strTemp & "&#" & AscW(Char) & ";"
         End If
      Next
      Convert= strTemp
    End Function
    Apres on utilise comme ceci


  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Décidement, C'est le grand rendez vous, Amitiés ucfoutu et progelect.

    Ta solution est très élégante, ucfoutu, la mienne fait plutot , hum, clodo , à coté.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re (et salut à Progelect et à Delbeke).

    Disons ici en outre que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Char Like "[A-Z]#[a-z]#[0-9]" Then
    n'est pas vraiment souhaitable dans un tel cas ! Le like est lourd et étrange car le filtre "[A-Z]#[a-z]#[0-9]" ne correspondra JAMAIS à UN SEUL caractère (Char = mid(Text ,iPnt ,1))....!!!!

    Je continuerais volontiers, mais les choses sont trop simples et je préfère voir notre ami se creuser un peu les méninges, d'abord !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008R2] script qui prend beaucoup de temps
    Par my_diva dans le forum Développement
    Réponses: 7
    Dernier message: 20/01/2014, 17h48
  2. Extraction qui prend beaucoup de temps
    Par khadija30 dans le forum SSIS
    Réponses: 14
    Dernier message: 14/05/2013, 17h12
  3. Liaison de donnée à combobox prend beaucoup de temps.
    Par Sankasssss dans le forum VB.NET
    Réponses: 19
    Dernier message: 07/01/2011, 20h02
  4. Fermeture de StreamReader prend beaucoup de temps?
    Par Lebbihi dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/08/2009, 23h57
  5. Réponses: 7
    Dernier message: 10/03/2009, 19h02

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