我有一个文本文件,其中包含由换行符分隔的数据行。我要做的是计算文件中的行数,不包括仅作为换行符的行数。
我正在尝试使用正则表达式来查看读取的每一行,如果它以换行符开头,不包括在我的行计数中,但我似乎无法让它工作。我已经到处搜索了如何做到这一点没有结果。
这是我为了尝试这样做而编写的方法:
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;
}
我尝试更改Singleline
和Multiline
之间的RegexOptions,我尝试将"\r|\n|\r\n"
放入模式匹配中,我尝试删除^
从表达,但我似乎无法让它工作。无论我做什么,我的lineCount
总是最终成为文件中的总行数,包括换行符。
我显然忽略了一些显而易见的事情,但我还不熟悉C#语言,看看有什么不对。一切看起来应该对我有用。有人可以帮帮我吗?
答案 0 :(得分:4)
使用LINQ使其成为单行计数器:
private int count(string filePath)
{
string[] lines = File.ReadAllLines(filePath);
return lines.Count(r => !String.IsNullOrWhiteSpace(r));
}
这也将排除其中包含空格的行。
如果要计算空格行数,可以更改为String.IsNullOrEmpty(r)
答案 1 :(得分:1)
最简单的方法是计算文件中的行数:
private static int LineCounter(string filePath)
{
string[] lines = File.ReadAllLines(filePath);
return lines.Length;
}
答案 2 :(得分:1)
myRead.ReadLine()
正在删除换行符。如果一行是空的,那么ReadLine()
将返回一个空字符串。
while ((line = myRead.ReadLine()) != null)
{
if (line.Length == 0)
{
lineCount++;
}
}
oakio给了我一个主意:
lineCount = File.ReadAllLines(filePath).Count((line) => line.Length > 0);
答案 3 :(得分: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;
}
答案 4 :(得分: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;
}