我有一个文本文件,我想使用按钮将其读取到表单上的richtextbox中这是文本文件:[1]你好,这是一个文本文件。我正在一个丰富的文本框中阅读这篇文章。我希望在文本框中单击一次按钮即可显示多行。[/1]
这是我的代码:
private void button2_Click(object sender, EventArgs e)
{
using (StreamReader reader = new StreamReader(@"F:test.txt"))
{
bool content = false;
while ((line = reader.ReadLine()) != null)
{
if (line.Contains("[1]"))
{
content = true;
}
if (content == true)
{
txtContent.AppendText(reader.ReadLine());
}
if (line.Contains("[/1]"))
{
content = false;
break;
//txtContent.AppendText(reader.ReadLine());
}
}
}
}
当我点击按钮2时,它只添加了第一行
我如何阅读介于[1]和[/1]之间的所有文本
我已经研究过XML的使用,但到最后我的文本文件中会有很多数据,所以我尽量避免使用它。然后,我想继续使用相同的richtextbox在[2]和[/2]之间存储文本,点击另一个按钮
感谢您的帮助
您的逻辑看起来可能会跳过行。
您从文件中读取一行,如果其中包含[1],则设置您的标志。然后检查您的标志是否已设置,并从文件中读取另一行。因此,这将不包括之前读取的行。然后检查下一行是否包含[/1]并脱离阅读循环。
假设你读了第一行,它是"[1]Hello this is a text file"。你的逻辑不会在RichTextBox中包括"Hello this are a textfile",因为你已经请求读下一行。然后检查您的结束标记([/1]),这将导致错误。现在我们回到循环的顶部,读取下一行("我正在将此读取到richtextbox中。")。这将使您的第一次检查失败,并且您的内容标志仍然为true,因此现在不会将当前行添加到richtextbox中,因为我们执行了另一个ReadLine()操作。
现在,你的问题就像开头的标签([1])本身就在一行上一样。如果这是真的,那么在将内容标志设置为true之后继续循环。
如果您不希望您的标记[1]和[/1]不在RichTextBox中,请在行变量中替换它们,并将行变量添加到RichTextBox。不要再读另一行添加到RichTextBox中,只要使用你已经读过的行,如果它符合你的标签之间的条件。
这个片段应该处理文件的所有(通用格式),除非您的标记再次出现在标记中(例如,"[1][1][/1][/1]")
private void button2_Click(object sender, EventArgs e)
{
using (StreamReader reader = new StreamReader (@"F:test.txt"))
{
bool content = false;
while ((line = reader.ReadLine()) != null)
{
if (line.Contains("[1]"))
{
content = true;
// You only need this continue if this is on a line by itself
continue;
}
if (content == true)
{
// The Replace should remove your tags and add what's left to the RichTextBox
txtContent.AppendText(line.Replace("[1]", "").Replace("[/1]", ""));
}
if(line.Contains("[/1]"))
{
content = false;
break;
}
}
}
}