phannhatthanh1510 Ответов: 2

Как найти и получить строку в текстовом поле, используя C#


Здравствуйте, у меня есть список данных в текстовый. Пример:
35480745295701728, 416433146831396068 || Carrien
35480709562394675, 379026073325960916 || постный
96154183216121221, 515151515159611872 || Сунайло
18151851515151818, 815618181215187187

Я хочу найти и показать строку в windows form C#. Пожалуйста, помогите!
Пример: поиск 35480709562394675. Это будет шоу: 35480709562394675, 379026073325960916 || Lean

Большое спасибо!

Что я уже пробовал:

System.IO.StreamReader ObjReader;
                ObjReader = new System.IO.StreamReader(File_name);

do
       {                    

         Textline = Textline + ObjReader.ReadLine();
         if (Textline.Contains(flag) == true)
         {
             for (int i = 0; i < txtInput.Lines.Length; i++)
               {
                //wrong somethings
               }
         else
         {
            lblOutput.Text = txtInput.Text + " : NOT FOUND";
         }
      }

      while (ObjReader.Peek() != -1);
      ObjReader.Close();

2 Ответов

Рейтинг:
2

OriginalGriff

Трудно точно определить, что должен делать этот код, но в лучшем случае он несколько запутан.
Вы добавляете каждую прочитанную строку в текстовую строку, независимо от того, что она содержит:

Textline = Textline + ObjReader.ReadLine();
Затем вы проверяете это, чтобы увидеть, содержит ли оно значение:
if (Textline.Contains(flag) == true)
Если это так, вы перебираете каждый символ в несвязанной и неизменной строке:
for (int i = 0; i < txtInput.Lines.Length; i++)
И... ничего с ним не делай:
{
 //wrong somethings
}
Если это не так, вы устанавливаете вывод на сообщение "не найдено", но показываете что-то, что вы не искали:
lblOutput.Text = txtInput.Text + " : NOT FOUND";
А потом вы идете вокруг и снова к нему за следующей строкой!
Если вы пытаетесь найти строку, содержащую определенное значение, то сядьте и подумайте об этом:
1) установите флаг с надписью "Не найдено".
2) Цикл по каждой строке
2.1) если строка содержит текст, то
2.1.1) установите флажок "найдено"
2.1.2) сохраните строку
2.1.3) выход из цикла (подсказка: break это удобно здесь)
3) После завершения цикла установите флажок "найдено"
3.1 если он установлен, покажите линию
3.2 если он все еще "не найден", сообщите об ошибке.

- Я? Я бы использовал Файл.ReadAllLines[^], а затем использовать foreach петля, чтобы было легче читать.


phannhatthanh1510

Спасибо за вашу идею. Я использую ReadAllLine и могу получить правильную строку

Пример полных данных:
442226082783011 || 444224591985152 || 04/06/2019 ||
367450779076725 || 455122459198567 || 04/06/2019 ||
756504089869778 || 422364058593394 || 04/06/2019 ||
643453064359261 || 943214058593364 || 04/06/2019 ||
735359076240626 || 432311338593159 || 04/06/2019 || Лайнрает
365202075218392 || 424324058593073 || 04/06/2019 ||
535675097553486 || 534525059269665 || 04/06/2019 ||
968563087172661 || 423523338795260 || 04/06/2019 ||

Код:
путь к строке = @"E:\Data.txt";
string[] readText = файл.ReadAllLines(путь);
foreach (строка s в readText)
{
richtextbox1 отображение.Текст += ы.Метод toString();
если ((ов.Содержит(txtInput.Текст) == истина))
{
lblOutput.Text = "найдено";
перерыв;
}
еще
{ lblOutput.Text = "Не Найдено";
}
}

Поиск: 365202075218392 и выходные результаты:
442226082783011 || 444224591985152 || 04/06/2019 ||
367450779076725 || 455122459198567 || 04/06/2019 ||
756504089869778 || 422364058593394 || 04/06/2019 ||
643453064359261 || 943214058593364 || 04/06/2019 ||
735359076240626 || 432311338593159 || 04/06/2019 || Лайнрает
365202075218392 || 424324058593073 || 04/06/2019 ||

Я хочу искать и показывать только последнюю строку: 365202075218392 || 424324058593073 || 04/06/2019 ||
Что же мне делать? пожалуйста, помогите мне

OriginalGriff

Начните с чтения того, что я сказал. Делает ли это ваш код или делает то, что сделал код, с которого вы начали?

Рейтинг:
2

phannhatthanh1510

Большое спасибо! Это работает с этим

string File_name = @"E:\Data.txt";
            string flag = txtInput.Text.Trim(); 
            string[] readText = File.ReadAllLines(File_name);
            foreach (string s in readText)
            {               
                if ((s.Contains(txtInput.Text) == true))
                {
                    richTextBox1.Text = s.ToString();
                    break;                   
                }
                else
                {
                    richTextBox1.Text = "Not Found";
                }
            }