Как извлечь 5-значные числа из большой строки? - PullRequest
0 голосов
/ 20 сентября 2019

Я использовал таймер для запуска string, я тоже использовал while, но мне интересно, есть ли более быстрый путь.У меня есть строка, которая содержит серийный номер даты, дата всегда после текста d|

private void Timer1_Tick(object sender, EventArgs e)
{
    string caldata = textBox6.Text;
    textBox7.Text = caldata.Length.ToString();

    if (caldata.Substring(0, 2) == "d|")
    {
        // MessageBox.Show("Found date" + caldata.Substring(2, 5));
        listBox1.Items.Add(caldata.Substring(2, 5));

        textBox6.Text = caldata.Remove(0, 7);
        caldata = textBox6.Text;
    }
    else
    {
        textBox6.Text = caldata.Remove(0, 1);
        caldata = textBox6.Text;
    }


    if (caldata.Length < 4)
    {
        timer1.Enabled = false;
    }
}

Моя строка, которая содержит данные, выглядит как прикрепленный.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Как правило, ваша проблема может быть решена с помощью тщательной отладки и пошагового выполнения кода.

В любом случае, ниже мое предложение:

Вы можете использовать регулярные выражения: (?<=d\|)\d{5}

Объяснение:

(?<=d\|) - положительный lookbeihnd: подтвердить, что предшествует d\|

\d{5} - соответствует 5 цифрам

Пример кода

  string caldata = "";
  MatchCollection matches = Regex.Matches(caldata, @"(?<=d\|)\d{5}");
  foreach (Match match in matches)
  {
    string txt = match.Value;
    // ... do smoething with text
  }
0 голосов
/ 20 сентября 2019

Remove и Substring - довольно медленные строковые операции, если вы хотите извлечь данные из строки, вы должны попытаться найти только это, а не удалять ненужные данные вокруг нее.

Regex, кажется, путьздесь, в этом случае "(?! d \ |) \ d {5}" должен быть самым быстрым.

Таким образом, ваш код будет выглядеть так:

var matches = Regex.Matches(caldata, @"(?!d\|)\d{5}");
foreach(Match m in matches)
{
  listbox1.Items.Add(m.Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...