0

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

  1. 以字符“X”开头
  2. 以字符“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字符串变量。但我不知道如何继续?

4

4 回答 4

6

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

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

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

File.ReadLines(somePath).Count(line=>Regex.IsMatch(line,"(^X.*$)|(^.*Y$)"))
于 2012-07-04T17:59:06.293 回答
0

这听起来像是功课,在这种情况下,我会给你指点——

如果您使用File.ReadAllLines(而不是ReadAllText),您将获得每行的数组。

然后,您可以使用String 上的方法,例如 (StartsWithEndsWith) 来检查您的条件...

于 2012-07-04T17:37:17.713 回答
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++;
        }
    }
}
于 2012-07-04T17:37:35.573 回答