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

Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 19 mai 2006 à 16:31 - Dernière réponse : Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 19 mai 2006 à 17:07
+3
Utile
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 $.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 19 mai 2006 à 18:45
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Dolphin Boy
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 19 mai 2006 à 21:08
+3
Utile
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

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_casy
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 19 mai 2006 à 16:58
0
Utile
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
Commenter la réponse de jrivet
cs_franckydeluka 228 Messages postés mardi 5 avril 2005Date d'inscription 4 janvier 2008 Dernière intervention - 19 mai 2006 à 17:00
0
Utile
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.
Commenter la réponse de cs_franckydeluka
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 19 mai 2006 à 18:13
0
Utile
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.

@+
Commenter la réponse de Dolphin Boy
Dolphin Boy 630 Messages postés vendredi 5 mai 2006Date d'inscription 17 février 2007 Dernière intervention - 20 mai 2006 à 12:06
0
Utile
Merci casy pour ces précisions.
Commenter la réponse de Dolphin Boy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.