Удаление / Замена нескольких слов в строке потокового чтения - PullRequest
1 голос
/ 06 марта 2019

У меня есть файл, который я открываю и читаю. В этом файле у меня есть несколько ключевых слов, которые я заменяю различными вещами БД.

Моя проблема: мне нужно иметь возможность УДАЛИТЬ конкретный текст из прочитанного файла. Больше, чем одно слово. Ничто из того, что я пробовал, не работает. Метод .Remove возвращает и пустой файл после того, как я закончу с ним. Вот мой код читателя

   using (StreamReader reader = File.OpenText(@"\\GTU-FS02\ScanTests\RLA.htm"))
   {

      /* Commented out. TRIED, but does not work
      string fill = reader.ReadToEnd();
      string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
      int i = fill.IndexOf(toRemove);
      if (i > 1)
      {
          fill.Remove(i, toRemove.Length);
      }    
      */
      string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
      string fill = reader.ReadToEnd();
      string fill2 = null;
      if (fill.Contains(toRemove))
      {
           fill2 = reader.ReadToEnd().Replace("UWNAME", UW).Replace("ClientFName", subFname).Replace("ExDate", ExpDate).Replace("UwEmail", UwEmail(UW))
                     .Replace("CinSured", client).Replace("&", amperSand).Replace(toRemove, "");

      }
      line = fill2;
  }

То, что вы видите, это разные попытки решить эту проблему. Я легко могу найти то, что ищу, но не могу удалить или заменить текст. Текст всегда будет одним и тем же, поэтому я знаю, что могу искать его именно так. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я попробовал это, и это работает.https://dotnetfiddle.net/lxtVGN

Проверьте, что возвращает reader.ReadToEnd();,

Не инициализируйте строку с нулем, всегда инициализируйте ее с "" или String.Empty

0 голосов
/ 06 марта 2019

Первый подход (закомментированный) не работает по той простой причине, что строки являются неизменяемыми объектами.Метод Remove возвращает новую строку, не изменяет строку, которая вызывает метод.Таким образом, ваш код должен быть просто исправлен с помощью

  line = fill.Remove(i, toRemove.Length);

, второй подход не работает, потому что вы вызывали ReadToEnd два раза.Таким образом, второй раз поток уже до конца файла и ничего не может прочитать в переменной fill2.Просто удалите первый ReadToEnd, а затем получите результат вызовов Replace.(Снова строки неизменны, и все строковые методы выполняют свою задачу и возвращают новую строку без изменения вызывающей строки)

  string toRemove = "GTU Renewal Application (a shorter, simplified renewal form)";
  string fill = reader.ReadToEnd();
  if (fill.Contains(toRemove))
  {
       line = fill.Replace("UWNAME", UW)
                  .Replace("ClientFName", subFname)
                  .Replace("ExDate", ExpDate)
                  .Replace("UwEmail", UwEmail(UW))
                  .Replace("CinSured", client)
                  .Replace("&", amperSand)
                  .Replace(toRemove, "");

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