6

我有一个文本文件,其中包含由换行符分隔的数据行。我要做的是计算文件中的行数,不包括仅是换行符的行数。

我正在尝试使用正则表达式来查看读取的每一行,如果它以换行符开头,则不要将其包含在我的行数中,但我似乎无法让它工作。我到处搜索如何做到这一点,但没有结果。

这是我为尝试执行此操作而编写的方法:

public int LineCounter()
{
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt");
    int lineCount = 0;
    string line;

    while ((line = myRead.ReadLine()) != null)
    {
        string regexExpression = @"^\r?\n";
        RegexOptions myOptions = RegexOptions.Multiline;
        Match stringMatch = Regex.Match(line, regexExpression, myOptions);
        if (stringMatch.Success)
        {
        }
        else 
        {
            lineCount++;
        }
    }
    return lineCount;
}

我尝试在 and 之间更改 RegexOptions SinglelineMultiline我尝试将"\r|\n|\r\n"模式匹配放入我的模式匹配中,并且我尝试^从表达式中删除 ,但我似乎无法让它工作。无论我做什么,我lineCount总是最终成为文件中的总行数,包括换行符。

我显然忽略了一些明显的事情,但我对 C# 语言还不够熟悉,无法看出问题所在。一切看起来都应该对我有用。有人可以帮我吗?

4

5 回答 5

4

使用 LINQ 使其成为单行计数器:

private int count(string filePath)
{
    string[] lines = File.ReadAllLines(filePath);
    return lines.Count(r => !String.IsNullOrWhiteSpace(r));
}

这也将排除其中包含空格的行。String.IsNullOrEmpty(r)如果要计算空白行,可以更改为

于 2013-07-24T19:41:20.093 回答
1

最简单的方法是计算文件中的行数:

private static int LineCounter(string filePath)
{
    string[] lines = File.ReadAllLines(filePath);
    return lines.Length;
}
于 2013-07-24T19:34:48.653 回答
1

myRead.ReadLine()正在删除换行符。如果一行是空的,那么ReadLine()将返回一个空字符串。

while ((line = myRead.ReadLine()) != null)
{
    if (line.Length == 0)
    {
        lineCount++;
    }
}

Oakio 给了我一个想法:

lineCount = File.ReadAllLines(filePath).Count((line) => line.Length > 0);
于 2013-07-24T19:36:14.597 回答
1

尝试改变你的代码来做这样的事情(删除正则表达式)。Readline 函数将从它返回的行中删除 \n 字符。因此,如果您看到一个空的非空字符串,那么您实际上是在看到您要查找的内容。此外,您还希望使用 using 语句包装 StreamReader,以确保在发生灾难性事件时关闭文件。

注意:此代码也计算仅包含空格的行。从你的描述看来,这就是你想要的。

public int LineCounter()
    {
        using (StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt"))
        {
            int lineCount = 0;
            string line;

            while ((line = myRead.ReadLine()) != null)
            {
                if (line.Count() != 0)
                {
                    lineCount++;
                }
            }
        }

        return lineCount;
    }
于 2013-07-24T19:36:54.423 回答
0

您不需要 RegEx 来执行此操作。只需检查该行是否为空。

public int LineCounter()
{
    StreamReader myRead = new StreamReader(@"C:\TestFiles\test.txt");
    int lineCount = 0;

    while (!myRead.EndOfStream)
    {
       string line = myRead.ReadLine();
       if (!string.IsNullOrWhiteSpace(line))
         lineCount++;
    }

    myRead.Close();

    return lineCount;
}
于 2013-07-24T19:36:56.113 回答