计算文件中以特定字符开头并以不同字符结尾的所有行

时间:2012-07-04 17:33:02

标签: c# winforms file text

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

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

    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字符串变量。但我不知道如何继续?

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

一个班轮完全不适合做家庭作业。 ;)

File.ReadLines(somePath).Count(line=>Regex.IsMatch(line,"(^X.*$)|(^.*Y$)"))

答案 2 :(得分:0)

这听起来像是家庭作业,在这种情况下,我会给你指点 -

如果您使用File.ReadAllLines(而非ReadAllText),则会获得每行的数组。

然后,您可以使用methods on String,例如(StartsWithEndsWith)来检查您的情况......

答案 3 :(得分:0)

如果你的目标是计算某些匹配的行,那么将所有文本读入内存效率不高。相反,我会使用缓冲流并一次处理一行

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++;
        }
    }
}