Différence entre mid et mid$, trim et trim$...

Résolu
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007 - 19 mai 2006 à 16:31
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007 - 20 mai 2006 à 12:06
Bonjour
Dans mes sources, je code mid, left, right, trim, ...
CodeAdvisor (Best Programming) de Microsoft conseille mid$, left$, right$, trim$, ...
J'ai voulu connaître la différence et j'ai cherché sur le net et dans le forum sans trouver de réponse convainquante.
J'ai même fait 2 versions d'un petit programme vb (un avec $ et l'autre sans) mais je n'ai pas vu de différence notable en terme de rapidité d'exécution et de mobilisation de ressources.

Quelqu'un saurait-il m'expliquer la réelle différence entre $ et pas $ ?

Merci d'avance

7 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 mai 2006 à 17:07
Je dirais comme franckydeluka... Les $ signifiant simplement qu'on
travail sur des chaînes. Mais il me semble qu'elles sont plus rapide
que les sans $.
3
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
19 mai 2006 à 18:45
Bon, test concluant.
Veuillez m'excuser pour le dérangement, j'aurais dù faire ce test avant de poser ma question.
J'espère quand même que ça pourra servir à d'autres.

J'ai bricolé ce test :

Private Sub Command1_Click()
Dim s As String
Dim r As String
Dim i As Long
Dim t As Date
Dim t1 As Date
Dim t2 As Date
s = "toto veut du gateau mais il préfère les gateaux avec de la chantilly"
t = Time
For i = 1 To 10000000
r = Mid(s, 60, 9)
Next
t1 = Format(Time - t, "hh:mm:ss")
t = Time
For i = 1 To 10000000
r = Mid$(s, 60, 9)
Next
t2 = Format(Time - t, "hh:mm:ss")
MsgBox "Sans $ : " & t1 & vbCrLf & "Avec $ : " & t2
End Sub

Je l'ai fait tourner sur une machine pourvue d'un CELERON 700Mhz (pour accentuer la différence) et le résultat est : avec le $ c'est plus rapide que sans comme le disait <rt15>. En l'occurence 3 secondes de différence pour ce test.
Donc il n'y a pas photo, j'adopte les $ en VB6.

Merci à tous
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 mai 2006 à 21:08
L'explication est simple :
Les fonctions left, mid, .... travaillent avec des variables de type Variant représentant des chaines.
Les fonctions left$, mid$, ... travaillent avec des variables de type Chaines.

Le résultat est tout aussi simple, avec les secondes, gain de temps et gain de mémoire. Mais effectivement quasiment invisible en temps normal.

Les premières necessitent du traitement en plus : conversion des paramètres 'string' passés en 'variant', moulinette interne (avec probablement reconvertion en string ou char ou ???), puis conversion du résultat 'variant' en 'string'.

Juste un détail, ne te base pas sur la comparaison VB6/.NET pour parler d'héritage. Dans VB.NET, l'ensemble des fonctions ont été réécrites. Quant à VB6, l'héritage n'est pas dans la fonction, mais uniquement dans la symbolique du signe $, qui déclarait  effectivement une variable comme chaine de caractère dans les anciens Basic.

Donc utiliser les xxx$ de préférences

3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 mai 2006 à 16:58
Salut,

D'après la MSDN

MID Fonction:

Renvoie une valeur de type Variant (String) contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.

BLABLABLA

Note   Utilisez la fonction MidB pour traiter sous forme d'octets les données relatives aux octets contenues dans une chaîne, comme dans les langages à jeux de caractères à octets doubles. Au lieu d'indiquer le nombre de caractères, les
<object id="alink_8" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_8.Click() arguments] indiquent le nombre d'octets. A des fins d'illustration du code utilisant la fonction MidB, reportez-vous au second exemple de la rubrique correspondante.

Voila j espere que ceci peu t'aider.

Note: j ai aussi fait ceci pour connaitre la réponse des experts
@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0

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

Posez votre question
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
19 mai 2006 à 17:00
Alors je peux me tromper et cela est à prendre avec précaution mais il me semble que le $ est un héritage du BASIC (Beginner's All-purpose Symbolic Instruction Code) et a été conservée jusqu'au VB6.

A noté que toutes ces instructions (mid$, left$, mid, left..) n'existent plus en VB.NET

Deluka.
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
19 mai 2006 à 18:13
jrivet > j'ai parcouru la MSDN de VB6 et le site de MICROSOFT : pas convaincant
franckydeluka > c'est ce que je me dis aussi : un vieil héritage. Je pratique aussi le VB.NET et les $ ont disparu comme Left et Right et il ne reste que le Mid. (sans $) si on n'utilise pas le NameSpace Microsoft.VisualBasic qui est lui aussi un héritage des anciennes versions de VB.
Rt15 > si quand on met les $ c'est plus rapide je met des $ partout. J'ai fait des tests mais sur de petits programmes. Je m'en vais tester avec une méga-boucle, on verra bien.

En fait, mon problème est que je dois reprendre une application écrite en VB6 qui rame à mort et je cherche toutes les optimisations possibles. J'ai déjà modifié pas mal de choses au niveau déclaration de variables, libération de mémoire, ... suivant les posts que j'ai lu dans le forum. Il y a amélioration mais ce n'est pas le top.
Cette application manipule beaucoup de fichiers texte (donc de chaînes) et c'est la raison de mon topic.

En tous cas, merci pour vos réponses, je vous tiendrais au courant de mes tests.

@+
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
20 mai 2006 à 12:06
Merci casy pour ces précisions.
0
Rejoignez-nous