У меня есть данные, поступающие через последовательный порт.В настоящее время я получаю его и разбиваю на каждое "," (см. Код для справки).Прямо сейчас я использую (для каждой) функцию, которая делает подстроку @ каждой встреченной запятой.Но я не хочу этого.
Что мне нужно, скажем, для извлечения только ALPHA, BRAVO и CHARLIE из String1, и если данные отсутствуют, как показано в String2, мое извлечение должно также привести кпустая подстрока (и).
Проблема заключается в том, что эти данные получены с устройства GPS, и если уровень сигнала плохой, строка вводится пустыми, то есть только запятыми.Таким образом, длина строки может изменяться незначительно или сильно (String1 представляет полную строку, а String2 представляет строку с пропусками).
String1: $ GPBWC, 220516, ALPHA, 00046.34, BRAVO, T, CHARLIE, 0004.6, N,EGLM * 11
String2: $ GPBWC ,,, 0, BRAVO ,,,, N, EGLM * 11
Я понимаю, что некоторые важные вопросы уже задавались ранее, но я не могу найтирешение, которое достаточно надежно.Итак, любая помощь приветствуется.
Код:
private string serialRx = string.Empty;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
serialRx += serialPort1.ReadExisting();
string[] lines = serialRx.Split(new char[] { '$' },
StringSplitOptions.None);
for (int i = 0; i < lines.Length - 1; i++)
{
if (lines[i].StartsWith("GPGSV"))
{
string[] values = lines[i].Split(new char[] { ',' });
foreach (var value in values)
{
Invoke(new Action(() => displaySplits(value)));
}
Invoke(new Action(() => displayReceivedText(lines[i])));
}
}
}