Optimisation d'un code de manipulation de chaine de caractere
waspy59
Messages postés189Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention15 mai 2013
-
1 déc. 2004 à 15:17
waspy59
Messages postés189Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention15 mai 2013
-
2 déc. 2004 à 03:55
bonjour a tous,
voila, j'ai créé dans un tit programme une procedure (voir ci-dessous) qui permet:
- ouvrir un fichier text (c) contenant une chaine de caractere hexadecimaux.
- de convertir les caracteres nuls "00" en caractere espace "20".
- de suprimer les caracteres "0A" et "0D".
- de reduire les successions de caracteres "20" à seulement "2020".
- de convertir alternativement ces doubles "20" en:
* "0A"
* "3B"
- enfin de convertir cette chaine de caractere hexa en une chaine de caractere ascii.
Open c For Input As #1
s1 = Input(LOF(1), #1)
Close #1
lettre = ""
i = 1
While i <= Len(s1)
lettre = Mid(s1, i, 2)
If lettre = "00" Then
s2 = s2 & "20"
Else
s2 = s2 & lettre
End If
i = i + 2
Wend
s1 = s2
m = InStr(1, s1, "0A")
n = InStr(1, s1, "0D")
If m <> 0 Or n <> 0 Then
s2 = ""
i = 1
lettre = ""
While i <= Len(s1)
lettre = Mid(s1, i, 2)If lettre "0A" Or lettre "0D" Then
s2 = s2 & ""
Else
s2 = s2 & lettre
End If
i = i + 2
Wend
s1 = s2
End If
i = 1
s2 = ""
While i <= Len(s1)
lettre = Mid(s1, i, 2)
lettre2 = Mid(s1, i + 4, 2)If lettre2 "20" And lettre "20" Then
s2 = s2 & ""
Else
s2 = s2 & lettre
End If
i = i + 2
Wend
s1 = s2
T = Split(s1, "2020")
s2 = ""
For i = 0 To UBound(T)
If i Mod 2 Then
s2 = s2 & T(i) & "0A"
Else
s2 = s2 & T(i) & "3B"
End If
Next
s1 = s2
s2 = ""
i = 1
While i <= Len(s1)
lettre = Mid$(s1, i, 2)
s2 = s2 & Chr(Val("&h" & lettre & "&"))
i = i + 2
Wend
Open c For Output As #1
Print #1, s2;
Close #1
MsgBox "fini"
End Sub
-----------------------------------------------------------------------------------
voila ma question:
comment optimiser ce code car pour:
- petit fichier (qq dizaine de ko)=> tres rapide
- grd fichier (qq centaine de ko)=> extrement lent
y a pas moyen d'optimiser la vitesse d'execusion en faisant une ouverture sequentielle du fichier? mais ca je sais pas faire
a l'avance, merci de votre aide
A voir également:
Optimisation d'un code de manipulation de chaine de caractere
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 1 déc. 2004 à 16:22
Je sais pas si ca va fonctionner mais je t'ai fait un truc en une seule boucle.
Open c For Input As #1
s1 = Input(LOF(1), #1)
Close #1
lettre = ""
i = 1
S2 = ""
S3 = "0A"
While i <= Len(s1)
lettre = Mid$(s1, i, 2)If Lettre "00" then Lettre "20"
Select case lettre
case "0A","0D"
Lettre = ""
case "20"
if right$(s2,2)="0A" Or right$(s2,2)="3B" then Lettre = "" End Select
s2 = s2 & lettre
If Right$(s2,4)="2020" Then
S2 = Left$(S2,Len(s2)-4) & s3
S3 = Iif(s3="0A","3B","0A)
End If
i = i + 2
Wend
Open c For Output As #1
Print #1, s2
Close #1
MsgBox "fini"
A tester car j'ai fait cela sans vérifier avec VB !
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 1 déc. 2004 à 16:40
Salut tout le monde,
Est ce que ici l utilisation de la fonction Replace ne serait pas la bienvenue?
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 1 déc. 2004 à 18:38
Re,
De rien,
Alors tu a remplacer ton code par quel code au final?
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------