2009-09-10 81 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