Extraction de valeurs numériques d'une String

CdXie Messages postés 4 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 22 juillet 2005 - 22 juil. 2005 à 18:07
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 22 juil. 2005 à 18:40
Hi !

Je souhaite récupérer dans une chaîne de caractères (variable type
string) des coordonnées X,Y,Z séparées par une virgule (cf. exemple
ci-dessous).

GOTO / 399.99900,
.00000,
3.00000
PT 57;

Existe-t'il en VBA Excel une
commande équivalente à sscanf de Matlab qui permet d'extraire
directement les valeurs numériques 399.999, 0 et 3 en utilisant la
virgule comme sépérateur ?



>> Ligne = 'GOTO /
399.99900, .00000,
3.00000
PT 57;'

>> sscanf (Ligne , 'GOTO / %f,%f,%f')

ans =

399.9990

0

3.0000



Merci d'avance.



CdXie

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juil. 2005 à 18:40
Salut
Ta chaine originale séparant chaque chiffre avec des virgules, c'est facile à séparer :
-1- Remplacer les multiples espaces par un seul :
Do While Instr(Ligne, " ") <> 0 ' 2 espaces entre les "
Ligne = Replace(Ligne, " ", " ") ' remplace 2 espaces par un seul
Loop
-2- Dissocier chaque donnée séparée par des virgules :
Dim Tableau() As String
Tableau = Split(Ligne, ",")
Dans Tableau(0), tu as "'GOTO / 399.99900"
Dans Tableau(1), tu as " .00000"
Dans Tableau(2), tu as " 3.00000 PT 57;"
-3- Récupération de chaque donnée :
Valeur1 = Trim(Split(Tableau(0), " ")(2))
Split(...)(2) est le même Split que plus haut, mais on ne prend que l'élément n° 2, c'est à dire le débutcar l'élément 0 "GOTO", le 1 "/" et donc le 2 = ton chiffre
Valeur2 = Trim(Tableau(1)) ' Simple, pas de difficulté, il n'y a que ce chiffre
Valeur3 = Trim(Split(Tableau(2), "PT")(0))
Dans ce dernier cas, on a choisi "PT" comme séparateur car le 3 est (ou pourrait être) précédé d'un espace, et le Split donnerait soit l'élément 0 soit le 1 : bug éventuel avec d'autres chaines.
Le Trim permet de virer les espaces devant et derrière qui ne servent pas

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
Rejoignez-nous