Optimisation: insérer un espace tous les deux caractères

Résolu
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013 - 3 févr. 2009 à 09:25
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013 - 3 févr. 2009 à 15:56
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 févr. 2009 à 13:40
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...
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
3 févr. 2009 à 14:23
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 
1
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 févr. 2009 à 15:26
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 :).
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 févr. 2009 à 15:30
tu sais combien de blancs tu dois insérer...
tu peux donc agrandir la chaine une fois pour toutes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 févr. 2009 à 15:56
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.
0
Rejoignez-nous