HEXAVIGESIMAL (BASE26)

Profil bloqué - 24 nov. 2006 à 07:47
cs_pit1 Messages postés 32 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 17 janvier 2007 - 25 nov. 2006 à 18:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40441-hexavigesimal-base26

cs_pit1 Messages postés 32 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 17 janvier 2007
25 nov. 2006 à 18:39
Si c'est pour optimiser la vitesse, essaye une fois (j'ai enlevé la conversion string->long et long->string à chaque itération):

Function DecToB26(ByVal Value As String) As String
If Not IsNumeric(Value) Then Return Value
Dim v1 As Long
Dim Resultat As String = ""
v1=int(Value)
Do While v1 > 0
Resultat = chr$((Value Mod 26)+65) & Resultat
v1 = clng(v1 / 26)
Loop
Return Resultat
End Function
perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020
25 nov. 2006 à 13:44
Merci .. vérifié, ce n'est pas flagrant mais sur une boucle test de 2M j'obtient 49s avec constante et 44s avec chr asc

par contre juste une petite modi a ton code pour que ca marche:

Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat
devient Resultat = chr$(v1+65) & Resultat

v2 = InStr(1, Chaine26, Mid$(MyString2, i, 1))
devient v2 = asc(Mid$(MyString2, i, 1)))-64

sinon j'ai viré les $ .... faute d'euros je prefere rien mettre ;)
cs_pit1 Messages postés 32 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 17 janvier 2007
24 nov. 2006 à 20:29
Au lieu de mettre une chaine string en constante, utilise les fonctions asc et chr, en sachant que "A"=chr(65), "B"=chr(66) etc, ce sera plus rapide:

Resultat = Mid$(Chaine26, 0 + v1, 1) & Resultat
devient Resultat = chr$(v1+65) & Resultat

v2 = InStr(1, Chaine26, Mid$(MyString2, i, 1))
devient v2 = asc(Mid$(MyString2, i, 1)))-65

Cela devrait marcher, sans l'avoir testé!
perceval_59 Messages postés 18 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 17 septembre 2020
24 nov. 2006 à 20:26
Et bien..... MERCI!!
ca marche impec (je vien de tester avec une boucle sur 100000 et pas d'erreur.

je desesperai depuis deux jours:)

encore merci
Profil bloqué
24 nov. 2006 à 07:47
Essaie ceci

'Decimal vers Hexavigesimal windows
Function DecToB26(ByVal Value As String) As String
If Not IsNumeric(Value) Then Return Value
Value = Value -1
Dim v1 As Long
Dim Resultat As String = ""
Do While (Value >= 0)
v1 = (Value Mod 26)
Value = Int(Value / 26) - 1
Resultat = Mid$(Chaine26, v1 + 1, 1) & Resultat
Loop
Return Resultat
End Function

Cela fonctionne correctement chez moi
A+
Rejoignez-nous