c#stream reader将文本文件读入richtextbox inbetween []标签

时间:2015-03-31 18:08:40

标签: c# text stream

我有一个文本文件,我想使用按钮在我的表单上读取一个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]之间按下另一个按钮点击

感谢您的帮助

1 个答案:

答案 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; 
            }
        }
    }
}