我有一个文本文件,我想使用按钮在我的表单上读取一个richtextbox 这是文本文件: [1] 您好,这是一个文本文件。我正在将它读入richtextbox。 我希望文本框中有多行可以在一次按钮上单击显示。 [/ 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());
}
}
}
}
当我点击button2时,它只会添加第一行
我如何阅读[1]和[/ 1]
之间的所有文字我已经研究过XML的使用,但我的文本文件到底会有很多数据,所以我试图避免使用它。 我想继续使用相同的richtextbox在[2]和[/ 2]之间按下另一个按钮点击
感谢您的帮助
答案 0 :(得分:0)
您的逻辑看起来可能会跳过线条。
您从文件中读取了一行,如果它包含[1],则设置您的标记。然后检查您的标志是否已设置并从文件中读取另一行。所以这不包括以前读过的行。然后检查下一行是否包含[/ 1]并从读取循环中断。
假设您已阅读第一行及其“[1]您好,这是一个文本文件。”您的逻辑不会在RichTextBox中包含“Hello this is text file”,因为您已请求读取下一行。然后检查结束标记([/ 1]),这将导致错误。现在我们回到循环的顶部并阅读下一行(“我正在将其读入richtextbox。”)。这将使您的第一次检查失败,并且您的内容标志仍然为true,因此现在此当前行不会添加到RichTextBox,因为我们执行了另一个ReadLine()。
现在你的问题就像开始标记([1])本身就是一行一样。如果这是真的,那么在将content标志设置为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;
}
}
}
}