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

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

Votre réponse

7 réponses

Meilleure réponse
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 19 mai 2006 à 17:07
3
Merci
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 $.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_rt15
Meilleure réponse
Dolphin Boy
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Dernière intervention
17 février 2007
- 19 mai 2006 à 18:45
3
Merci
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

Merci Dolphin Boy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Dolphin Boy
Meilleure réponse
cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 19 mai 2006 à 21:08
3
Merci
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

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_casy
jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 19 mai 2006 à 16:58
0
Merci
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
Messages postés
228
Date d'inscription
mardi 5 avril 2005
Dernière intervention
4 janvier 2008
- 19 mai 2006 à 17:00
0
Merci
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
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Dernière intervention
17 février 2007
- 19 mai 2006 à 18:13
0
Merci
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
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Dernière intervention
17 février 2007
- 20 mai 2006 à 12:06
0
Merci
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.