Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
6 mai 2006 à 19:02
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
6 mai 2006 à 21:23
Bonjour,
Je prog en VB6 et je voudrais savoir si, en dehors d'une compatibilité avec des versions antérieures, il existe une réelle différence en terme de rapidité et de mobilisation de ressources entre ces 2 manières de faire :
Manière 1 :
MaValeur = StripNulls(MaChaine)
Public Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function
Manière 2 :
MaValeur = Split(MaChaine, Chr(0))(0)
A vue de nez, je pense que la 2ème manière est la meilleure, me trompe-je ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 6 mai 2006 à 19:31
Détrompe toi : vu ce que tu cherche à faire, la première est bien meilleure : elle ne fait la recherche qu'une seule fois !
Split permet de découper ta chaîne en tableaux contenant tout les éléments entre les délimiteurs, donc sur des chaînes assez longue, elle est bien plus lente pour trouve 1 occurence d'un délimiteur car elle les trouve tous !
Voici un petit prog pour te montrer la différence (ta fonction est légérement modifiée : je stocke le résultat du InStr pour éviter de l'appeller 2 fois dans la même fonction, ce qui sert strictement à rien, si ce n'est de perdre du temps !) :
Option Explicit
Public Function StripNulls(ByVal OriginalStr As String) As String
Dim iPosition As Integer
iPosition = InStr(OriginalStr, "a")
If iPosition > 0 Then
OriginalStr = Left(OriginalStr, iPosition - 1)
End If
StripNulls = OriginalStr
End Function
Private Sub Form_Load()
Dim MaValeur As String
Dim MaChaine As String
Dim Temps As String
Dim i As Long
Dim MesValeurs() As String
MaChaine = "exemple de chaine de caractere assez longue avec beaucoup de a ! ah ah ah"
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 6 mai 2006 à 21:23
Merci DARKSIDIOUS, tu m'as convaincu.
Bien que pour ce que je veux faire :
For i = 0 To 1000000
MaValeur = Split(MaChaine, "a")(0)
Next i
correspond mieux que :
For i = 0 To 1000000
MesValeurs = Split(MaChaine, "a")
Next i
il n'en reste pas moins que le Instr est au moins 2 fois plus rapide que le Split (avec une chaine de 2 caractères ! lol - la proportion augmente si la chaine est plus longue).