L48 Ответов: 1

Как напечатать всю строку с указанным регулярным выражением с помощью цикла foreach, C#


Я хочу напечатать(прочитать) всю строку, которая содержит "неактивное" слово на ней.
До сих пор мой код печатал только это значение(так что значение после слова:неактивный):
- Код транзакции 1*HO*A

вместо:
DC17-90:01 TAER_| 7_KOCNI5| счет 990034 неактивен - код транзакции 1*HO*A

Файл содержит следующие строки:
DC175-90:43 QWERT55| 106_POIU| Прибыль убыток может быть списан только с одобрения HO*HO*A

DC172-10:01 KJHG_| 78_NMN5| несанкционированный овердрафт в размере 14 евро на счете 998877

DC17-90:01 TAER_| 7_KOCNI5| счет 990034 неактивен - код транзакции 1*HO*A

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

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string inputfilepath = path + "\\overrides.txt";
            string path2 = path + @"\newoverride.txt";
            string s;
          

            StreamReader file = new StreamReader(inputfilepath);
            List<string> inactive = new List<string>();
            while (file.EndOfStream != true)
            {
                s = file.ReadLine();
                Match m = Regex.Match(s, "(?<=inactive)(.)+");
                if (m.Success)
                {
                    inactive.Add(m.ToString());
                }

            }


            foreach (string l in inactive)
            {
                using (StreamWriter writer = new StreamWriter(path2))
                {

                    writer.WriteLine(l);

                }

1 Ответов

Рейтинг:
12

CPallini

Поскольку вы читаете строку за строкой, почему бы вам просто не использовать такую строку?
то есть изменение от

Цитата:
если (m.успех)
{
неактивный.Добавить(м. Метод toString());
}

к
if (m.Success)
{
  inactive.Add(s);
}




[обновление]
Вы также должны изменить от
Цитата:
foreach (строка l в неактивном состоянии)
{
используя (писатель модулю записи StreamWriter = новая модулю записи StreamWriter(путь2))
{

писатель.WriteLine(l);

}
к
using (StreamWriter writer = new StreamWriter(path2))
{
   foreach (string l in inactive)
   {
      writer.WriteLine(l);
   }
}

[/обновление]


L48

это сработало, спасибо большое

CPallini

Добро пожаловать.

L48

ps:но сейчас печатается только одна строка из всего файла.
У меня есть еще строки, содержащие это слово, которые, как предполагается, должны быть прочитаны все строка за строкой.
Есть идеи?

CPallini

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

L48

да, потому что я вырезал ... я думал, что нет необходимости добавлять сюда все строки.

CPallini

Смотрите мое обновленное решение.

L48

отлично сработано :))

CPallini

:-)