2009-09-10 2 views
3

У меня есть строка, содержащая известное количество двойных значений. Какой самый чистый способ (через 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)) должен работать. –

+1

@Ty - показанный код будет работать. Ламба сменяется для самой группы методов. –

+1

@ Дрю: Тай прав. «Аргументы типа для метода ... Выберите ... не могут быть выведены из использования. Попробуйте явно указать аргументы типа». Я исправил это. – dtb

4

Вы можете использовать String.Split ('', StringSplitOptions.RemoveEmptyEntries), чтобы разделить его на «одиночные значения». Тогда это прямо Double.Parse (или TryParse)

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

Ответ на вопрос переносится в DoSomething(), и он не принимает 1E6 и т. Д. –

Смежные вопросы