Différence entre mid et mid$, trim et trim$... [Résolu]

Signaler
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007
-
Dolphin Boy
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007
-
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

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
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 $.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
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

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
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
Messages postés
228
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1
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.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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.

@+
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Merci casy pour ces précisions.