C# 计算文件中以某个字符开始,以另一个字符结束的所有行数

C# 计算文件中以某个字符开始,以另一个字符结束的所有行数,c#,winforms,file,text,C#,Winforms,File,Text,我想要实现的是加载一个文本文件,然后计算以下所有行: 以字符“X”开头 以字符“Y”结尾 我的代码如下所示: string txtContent; try { if (openFileDialog1.ShowDialog() == DialogResult.OK) { txtContent = File.ReadAllText(openFileDialog1.FileName); } } catch (Exception ex) { Messag

我想要实现的是加载一个文本文件,然后计算以下所有行:

  • 以字符“X”开头
  • 以字符“Y”结尾
  • 我的代码如下所示:

    string txtContent;
    try
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            txtContent = File.ReadAllText(openFileDialog1.FileName);
    
        }
    }
    catch (Exception ex) {
        MessageBox.Show(ex.Message, "Form1", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    
    我正在将txt文件内容读入
    txtContent
    string变量。但我不知道如何继续

    好吧,让我们做“提示”,而不仅仅是给你代码

    • 在UI线程中读取文件通常不是一个好主意。快速试验是可以的,但不要在生产代码中进行
    • 如果要读取文件中的行,请使用(.NET 2+)或(.NET 4+)
    • 使用和确定字符串是以特定方式开始还是结束
    • 考虑使用LINQ的方法来计算与谓词匹配的项

      • 这听起来像是家庭作业,在这种情况下,我会给你一些建议-

        如果使用(而不是
        ReadAllText
        ),将得到每行的数组


        然后,您可以使用(
        StartsWith
        EndsWith
        )来检查您的条件…

        如果您的目标是计算某些匹配行,则将所有文本读入内存不是很有效。相反,我将使用一个缓冲流和一次一条处理线

        using (FileStream fs = File.Open(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        using (BufferedStream bs = new BufferedStream(fs))
        using (StreamReader sr = new StreamReader(bs))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                if (line.StartsWith(START_CHARACTER) || line.EndsWith(END_CHARACTER))
                { 
                    count++;
                }
            }
        }
        

        完全不适合做家庭作业的单行线


        这是家庭作业吗?请正确地标记它,然后不确定这个评论是否适合这样做,只是想说我经常发现自己在这个网站上看到你的评论,几乎总是觉得它们非常有用。所以我想说谢谢你的帮助,不是特别的,而是一般的。编辑:我刚刚认出了你的名字,意识到我的桌子上放着你的一本书。。。所以我也要谢谢你,我想。。。我觉得听起来很熟悉
        File.ReadLines(somePath).Count(line=>Regex.IsMatch(line,"(^X.*$)|(^.*Y$)"))