c#在[]标记之间,将读取文本文件的阅读器流式传输到richtextbox中



我有一个文本文件,我想使用按钮将其读取到表单上的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; 
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新