删除/替换流阅读器字符串中的多个单词

时间:2019-03-05 21:01:10

标签: c# asp.net streamreader

我有一个正在打开和阅读的文件。在此文件中,我有几个关键词,将用不同的数据库内容替换。

我的问题:我需要能够从读取的文件中删除特定的文本。不止一个字。我没有尝试过任何工作。完成后,.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 :(得分:0)

第一种方法(已注释的方法)由于字符串是不可变对象的简单原因而无法工作。 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, "");

  }

答案 1 :(得分:0)

我尝试过了,而且行得通。 https://dotnetfiddle.net/lxtVGN

检查reader.ReadToEnd(); 回来了,

请勿使用null初始化字符串,而始终使用""String.Empty

对其进行初始化。