разделение сложной строки на 3 части - PullRequest
1 голос
/ 28 октября 2011

Я общаюсь с измерительным прибором, и он возвращает данные в одной строке. Вывод выглядит так:

string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";

Так что мне интересно получить в этой строке первую и вторую часть. Первая часть - ток в амперах, а вторая - метка времени (время измерения).

Я пытаюсь этот код, но он не работает:

temp = result.Split(',');

tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0]);
tipair.Time = float.Parse(temp[1]);

В идеале я хочу, чтобы это было -3.546714E-10 для текущего и 0 для времени (время будет любым положительным числом).

ОБНОВЛЕНИЕ: Я пытался сделать, как показано ниже, но я получаю очень плохие цифры (намного больше, чем они должны быть!)

temp = result.Split(',');

tipair = new Results.TIPair();
tipair.Current = float.Parse(temp[0].Substring(0, temp[0].Length - 1));
tipair.Time = float.Parse(temp[1]);

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

Вы можете анализировать ток, используя Double.Parse () и действительные Числовые стили :

string result = "-3.546714E-10A,+0.000000E+00,+5.120000E+02\n";
var parts = result.Split(',');

double current = double.Parse(parts[0].Remove(parts[0].Length - 1),
                        NumberStyles.AllowExponent | NumberStyles.Number);
double time = double.Parse(parts[1],
                        NumberStyles.AllowExponent | NumberStyles.Number);

MSDN, Перечисление NumberStyles :

AllowExponent Указывает, что числовая строка может быть в экспоненциальной записи. Флаг AllowExponent разрешает анализируемую строку содержать показатель степени, который начинается с символа "E" или "e" и за которым следует необязательный положительный или отрицательный знак и целое число. Другими словами, он успешно разбирает строки в форме nnnExx, nnnE + xx и nnnE-xx. Он не допускает десятичный разделитель или войдите в значение и мантиссу; чтобы эти элементы в анализируемой строки, используйте AllowDecimalPoint и AllowLeadingSign flags или используйте составной стиль, который включает эти отдельные флаги.

2 голосов
/ 28 октября 2011

Он не знает единства Ампера в первой части ...

вы пытаетесь разобрать "-3.546714E-10A" для всплытия.

Вы должны сначала отрезать "A" с помощью:

part[0].TrimEnd('A')

UPDATE:

check Конвертировать научные данные в плавающие Вопрос для научного анализа

кстати: float может обрабатывать с точностью до 7 символов (которые вы полностью используете). если вы получите более точные значения, вы должны использовать double (точность 15-16)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...