Optimisation: insérer un espace tous les deux caractères [Résolu]

Signaler
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013
-
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013
-
Salut à tous,

Comme le titre l'indique, j'avais besoin d'insérer un espace tous les deux caractères dans une variable string qui peut changer de taille. J'ai essayé de le faire moi même, et j'ai réussi, mais c'est plus sur la méthode que je me posais des questions, ça va comme ça? y a t il moins gourmand?

Dim temp as string
Dim buffer as string

While Temp <> ""
            buffer = buffer & Left(Temp, 2) & " "
            Temp = Mid(Temp, 2)
        End While
      
        s = buffer

Merci!

5 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
le gros probleme dans ton code est la reallocation continue de mémoire.

es-tu bien en .Net ? si oui, tu as des StringBuilders
sinon, je peux te préparer quelque chose...
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Salut,

Voici une manière parmi tant d'autres pour y arriver (j'ignore si c'est la meilleure en revanche )





Dim
 str As String =  "abcdefghij"





' La boucle For ne s'initialise qu'une fois donc si on rajoute des caractères


' dans la variable de type String --> la boucle va s'arrêter avant d'atteindre


' la fin de cette chaine.




' Il faut donc prendre le nombre de caractères de la chaine et on rajoute le nombre d'espaces


' nécessaires


For
 nb As Integer  = 0 To str.Length + Math.Round(str.Length / 20, MidpointRounding.ToEven) - 1 Step 3
     str =  str.Insert(nb,  " " )
Next





On obtient la chaine suivante

--> ab cd ef gh ij

++

Fauve


<hr size ="2" width="100%" />
Pensez : Réponse Acceptée 
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Je connaissais pas les .insert, merci pour ta méthode Fauve!

Renfield, te sachant de bons conseils, je vais revoir les stringbuilders (dont j'ai un souvenir douloureux).

"la reallocation continue de mémoire." 
< à cause du while? Je crois savoir que les variables string sont plus lourdes que les integer, ce serait mieux en remplaçant       While Temp <> ""      par     While temp.lengh >0        ?

Bien sur, je cherche plus à m'instruire sur les bonnes pratiques que qu'autre chose, c'est pour ça que je pinaille :).
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
tu sais combien de blancs tu dois insérer...
tu peux donc agrandir la chaine une fois pour toutes
Messages postés
148
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
9 novembre 2013

Dans ce cas là, c'est un signal radio fréquence de longueur variable que je reçois (en fait c'est des paquets de 10 bits), converti en hexadécimal et mis en forme en groupes de 2 caractères. Le coup la longueur variable, c'est assez dur à expliquer compte tenu que j'ai des messages sur 10 bits, mais dans les faits, j'ai dans certains cas (déterminés) 3 caractères hexa de moins.

 A chaque message reçu, je lance une fonction qui le met en forme et l'interprète. La fonction peut être amenée à être lancée très souvent, en fonction du nombre de messages reçus, d'où la volonté d'optimiser.