C# 删除/替换streamreader字符串中的多个单词
我正在打开和阅读一个文件。在这个文件中,我有几个关键字,我正在用不同的数据库内容替换它们 我的问题是:我需要能够从读取文件中删除特定文本。不止一个字。我试过的东西都不管用。.Remove方法在我处理完后返回一个空文件。这是我的阅读器代码C# 删除/替换streamreader字符串中的多个单词,c#,asp.net,streamreader,C#,Asp.net,Streamreader,我正在打开和阅读一个文件。在这个文件中,我有几个关键字,我正在用不同的数据库内容替换它们 我的问题是:我需要能够从读取文件中删除特定文本。不止一个字。我试过的东西都不管用。.Remove方法在我处理完后返回一个空文件。这是我的阅读器代码 using (StreamReader reader = File.OpenText(@"\\GTU-FS02\ScanTests\RLA.htm")) { /* Commented out. TRIED, but does not w
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;
}
你看到的是解决这个问题的不同尝试。我可以很容易地找到我要找的内容,但我不能删除或替换文本。文本总是一样的,所以我知道我可以这样寻找。有人知道怎么做吗?第一种方法(注释的方法)不起作用,原因很简单,字符串是不可变的对象。Remove方法返回一个新字符串,不更改调用该方法的字符串。因此,您的代码应该简单地用
line = fill.Remove(i, toRemove.Length);
第二种方法不起作用,因为您已经调用ReadToEnd两次。因此,第二次流已经到达文件的末尾,无法读取fill2变量中的任何内容。只需删除第一个ReadToEnd,然后获取Replace调用的结果。(同样,字符串是不可变的,所有字符串方法执行其任务并返回新字符串,而不更改调用字符串)
第一种方法(注释的方法)不起作用,原因很简单,字符串是不可变的对象。Remove方法返回一个新字符串,不更改调用该方法的字符串。因此,您的代码应该简单地用
line = fill.Remove(i, toRemove.Length);
第二种方法不起作用,因为您已经调用ReadToEnd两次。因此,第二次流已经到达文件的末尾,无法读取fill2变量中的任何内容。只需删除第一个ReadToEnd,然后获取Replace调用的结果。(同样,字符串是不可变的,所有字符串方法执行其任务并返回新字符串,而不更改调用字符串)
我试过了,效果很好。
检查reader.ReadToEnd()中的内容代码>
他们回来了
不要用null初始化字符串,总是用“
或字符串初始化它。空的我试过了,它能工作。
检查reader.ReadToEnd()中的内容代码>
他们回来了
不要用null初始化字符串,请始终用“”
或字符串初始化它。空的
是否要替换文件中的内容?e、 g.将更改保存回该文件?您是否尝试调试并找出fill2变量的值?我正在尝试删除分配给字符串变量“string toRemove”的文本。然后我将新文本写入电子邮件正文。您是否尝试替换文件中的内容?e、 g.将更改保存回该文件?您是否尝试调试并找出fill2变量的值?我正在尝试删除分配给字符串变量“string toRemove”的文本。然后,我将新文本写入电子邮件正文,删除代码中的最后一行,这使得替换内容有些无用。或者在if语句中将“行”改为fIL2。考虑使用<代码> StringBuilder。从字符串创建StringBuilder,然后调用Replace all。它将在StringBuilder的缓冲区内进行替换,而不是每次都创建一个新字符串。感谢您的帮助。不幸的是,这些也不起作用。我以前试过,但为了你的帮助,我又试过了。第二个方法返回空。。第一种会导致错误。我尝试了多种方法,但都不起作用。简单地删除预定义的文本集是如此困难,这似乎很愚蠢57。有没有例子说明如何实现这一点?我查了一下StringBuilder,但没有发现它的实现有什么不同。我想你需要启动调试器。在调用ReadToEnd的行上放置一个断点,并检查该方法的结果。然后一步一步地进行,观察变量中的变化。删除代码中的最后一行,这使得替换有些无用。或者在if语句中将“行”改为fIL2。考虑使用<代码> StringBuilder。从字符串创建StringBuilder,然后调用Replace all。它将在StringBuilder的缓冲区内进行替换,而不是每次都创建一个新字符串。感谢您的帮助。不幸的是,这些也不起作用。我以前试过,但为了你的帮助,我又试过了。第二个方法返回空。。第一种会导致错误。我尝试了多种方法,但都不起作用。简单地删除预定义的文本集是如此困难,这似乎很愚蠢57。有没有例子说明如何实现这一点?我查了一下StringBuilder,但没有发现它的实现有什么不同。我想你需要启动调试器。在调用ReadToEnd的行上放置一个断点,并检查该方法的结果。然后一步一步地进行,观察变量marcos中的变化,我已经尝试了“”和String.Empty。遗憾的是,无论我选择哪种方式,我都会得到同样的结果。在这个解决方案中,我可以获得与您相同的结果,但是当我从文件中读取内容而不是从实例化的字符串中读取内容时,会出现混乱。就像你的例子一样。我还没有弄明白这一部分。你能提供一个运行测试的示例文件吗?Marcos,我已经尝试了“”和String.Empty。遗憾的是,无论我选择哪种方式,我都会得到同样的结果。在这个解决方案中,我可以获得与您相同的结果,但是当我从文件中读取内容而不是从实例化的字符串中读取内容时,会出现混乱。就像你的例子一样。我还没有弄清楚那部分。你能提供一个运行测试的示例文件吗?