2009-09-10 59 views
3

我有一个包含已知数量的double值的字符串。什么是最简洁的方式(通过C#)来解析字符串并将结果插入匹配的标量变量。基本上,我想这样做sscanf语句相当,但在C#:从C中的字符串解析多个双精度#

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

...假设 “textBuff” 可能包含以下内容:

 
"-1.123 4.234 34.12 126.4 99  22" 

同时,该每个值之间的空格字符数可能会有所不同。

感谢您的指点。

回答

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]; 

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

认为你需要为选择一个拉姆达。 选择(x => double.Parse(x))应该有效。 – 2009-09-10 16:18:17

+1

@Ty - 显示的代码将起作用。 lamba可以交换方法组本身。 – 2009-09-10 16:20:42

+1

@德鲁:Ty是对的。 “方法... Select ...的类型参数不能根据用法推断,请尝试明确指定类型参数。”我修正了这个问题。 – dtb 2009-09-10 16:22:22

4

您可以使用String.Split('',StringSplitOptions.RemoveEmptyEntries)将其拆分为“单个值”。那么它是一个直Double.Parse(或的TryParse)

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

该问题的答案已移至DoSomething(),并且不会接受1E6等。 – 2009-09-10 16:23:44