2009-09-10 11 views
3

J'ai une chaîne qui contient un nombre connu de valeurs doubles. Quel est le moyen le plus propre (via C#) pour analyser la chaîne et brancher les résultats dans des variables scalaires correspondantes. Au fond, je veux faire l'équivalent de cette déclaration sscanf, mais en C#:Analyser plusieurs doubles d'une chaîne en C#

sscanf(textBuff, "%lg %lg %lg %lg %lg %lg", &X, &Y, &Z, &I, &J, &K); 

... en supposant que "textBuff" peut contenir les éléments suivants:

 
"-1.123 4.234 34.12 126.4 99  22" 

... et que la le nombre de caractères d'espace entre chaque valeur peut varier.

Merci pour les pointeurs.

Répondre

18
string textBuff = "-1.123 4.234 34.12 126.4 99  22"; 

double[] result = textBuff 
    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(s => double.Parse(s)) 
    .ToArray(); 

double x = result[0]; 
// ... 
double k = result[5]; 

ou

string textBuff = "-1.123 4.234 34.12 126.4 99  22"; 

string[] result = textBuff 
    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

double x = double.Parse(result[0]); 
// ... 
double k = double.Parse(result[5]); 
+2

pense qu'il faut lambda pour cette sélection. Sélectionnez (x => double.Parse (x)) devrait fonctionner. –

+1

@Ty - le code affiché fonctionnera. Le lamba est échangeable pour le groupe de méthodes lui-même. –

+1

@Drew: Ty a raison. "Les arguments de type pour la méthode ... Select ... ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type." J'ai réparé ça. – dtb

4

Vous pouvez utiliser String.Split ('', StringSplitOptions.RemoveEmptyEntries) pour le diviser en "valeurs uniques". Ensuite, il est un Double.Parse droit (ou TryParse)

0
foreach(Match m in Regex.Matches(inputString, @"[-+]?\d+(?:\.\d+)?")) 
    DoSomething(m.Value); 
+3

La réponse à la question est déplacée à DoSomething(), et elle n'acceptera pas 1E6 etc. –

Questions connexes