2 MÉTHODES DE CONCATÉNATION DE TEXTE

Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008 - 19 mars 2003 à 16:58
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007 - 24 févr. 2005 à 16:56
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/5426-2-methodes-de-concatenation-de-texte

Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
24 févr. 2005 à 16:56
Je suis tombé dessus par hazard!

J'aimerai bien savoir quand est-il des remarques deposées il y a presque 2 ans.

Ça m'interesserait...
fluminis Messages postés 73 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 20 juin 2005
10 mai 2003 à 23:06
je dois etre con mais :
je me demandais un truc. Le but de cette methode est de ne pas faire de concatenation a l'aide du symbole &.
or je vois la ligne :
BigStr = BigStr & Space$(L)
donc on retombe dans l'emploi de la methode standard !?!?
c'est quoi la difference entre :
CH1 = CH1 & CH2
et :
CH1 = CH1 & Space(L2)
le caractere & n'a pas la meme fonction dans les deux cas ou quoi ?
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
21 mars 2003 à 11:14
Bon, bien, en plaçant dans un cas concret l'instruction mid$() est clairement plus rapide.
cas concret : bigstr est de longueur constante, donc pas besoin de perdre du temps machine avec un bigstr & space$(valeur), là tout de suite on sent la différence entre entre un
bigstr = bigstr & chr$(toto)
et un
mid$(bigstr,i,1) = chr$(toto)

Bref, mid$() doit être utilisé pour les concaténations de chaines à taille constante, à l'instar de "&"
Pour les chaines à longueur variable, l'appel à space$() pour l'allocation"rapide" de mémoire bouffe tt les performances.
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
19 mars 2003 à 16:58
Le sub de test fourni dans l'exemple est déloyale !
pourquoi le teste du truc "&" basique du VB est autonome alors que celui de mid$() dépend de ccOffset et ccIncrement , qui sont des variable public Long ?

lorsque on réécrit la fonction de test du Mid$, pour qu'il ne dépende plus de ces 2 variables globales (de façon à faire un Function() autonome), on obtient :

(I, L, LD type Long)

For I = 1 To LoopCount
LD = Len(BigStr)
L = Len(ConcatStr)
BigStr = BigStr & Space$(L)
Mid$(BigStr, LD, L) = ConcatStr
Next I

et les performances deviennent absolument identique ...

En résumé, il est intéressant d'utiliser les concaténations via Mid$() dans des cas bien préçis, càd lorsque l'on connait à l'avance les tailles des variables, ou encore lorsque on peut utiliser des variables globales pour travailler sur 1 variable. Le reste du temps, elles sont équivalente.

Nota : j'ai l'impression de dire une connerie, y'a peut-être un "truc" ... et que vient faire left$() dans l'histoire ? c'est louche
Rejoignez-nous