【问题标题】:c# stream reader reading text file into richtextbox inbetween [] tagsc#流阅读器将文本文件读入[]标签之间的richtextbox
【发布时间】:2015-03-31 18:08:40
【问题描述】:

我有一个文本文件,我想使用按钮将其读入表单上的 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]之间的文本

感谢您的帮助

【问题讨论】:

  • 你需要一个 bool 变量。识别[1]时设为true,识别[/1]时设为false。如果为真,则追加文本行。
  • @HansPassant 我已经尝试过你的建议,我遇到了同样的问题,我该如何正确设置这个变量?我正在努力掌握它我已经修改了我的代码以显示我的尝试

标签: c# text stream


【解决方案1】:

您的逻辑看起来可能会跳过行。

你从文件中读入一行,如果它包含 [1] 你设置你的标志。然后检查是否设置了标志并从文件中读取另一行。因此,这将不包括先前读取的行。然后检查下一行是否包含 [/1] 并从阅读循环中中断。

假设您阅读了第一行及其“[1]Hello this is a text file”。您的逻辑不会在 RichTextBox 中包含“您好,这是一个文本文件”,因为您已请求读取下一行。然后你检查你的结束标签([/1]),这将导致错误。现在我们回到循环的顶部并阅读下一行(“我正在将它读入richtextbox。”)。这将使您的第一次检查失败,并且您的内容标志仍然为真,因此现在该当前行将不会添加到 RichTextBox,因为我们执行了另一个 ReadLine()。

现在你的问题就像开始标签 ([1]) 本身就在一行上一样。如果这是真的,那么在你将内容标志设置为真之后继续你的循环。

如果您不希望标签 [1] 和 [/1] 不在 RichTextBox 中,请将它们替换为 line 变量并将 line 变量添加到 RichTextBox。不要阅读另一行添加到您的 RichTextBox,只需使用您已经阅读的行,如果它符合您的标签之间的条件。

这个 sn-p 应该处理您文件的所有(通用格式),除非您的标签再次出现在您的标签中(例如,“[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; 
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多