StreamReader 获取下一行并跳过空行
StreamReader get next line and skip over empty lines
我正在使用 StreamReader 读取文件。这些文件有时在其他行之间有空行。中间空行的数量可以是任意数量。让我的 StreamReader 跳过所有空行直到读取非空行的最佳方法是什么?
我有一个在 while 循环中调用的函数:
/// <summary>
/// Moves the stream to the next non-empty line, and returns it.
/// </summary>
/// <param name="srFile"></param>
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (String.IsNullOrWhiteSpace(line))
GetNextLine(srFile);
return line;
}
一切似乎都很好,但由于某种原因,这不起作用。每当行不为空时, return 行确实会被命中,但由于某种原因,会进行更多的递归 'GetNextLine()' 调用。谁能看出我做错了什么,或者提供解决方案?
您忘记了 return 递归调用的结果:
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (String.IsNullOrWhiteSpace(line))
return GetNextLine(srFile); // here, but can you spot infinite loop?
return line;
}
请注意,您还应该处理文件结尾。例如。 return null
如果到文件末尾没有非空行:
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (line == null || !String.IsNullOrWhiteSpace(line))
return line;
return GetNextLine(srFile);
}
此解决方案避免递归并处理任意数量的空行:
private string GetNextLine(StreamReader srFile)
{
string line;
do
{
line = srFile.ReadLine();
if (line == null)
return null; // end of file
} while (line.Length == 0); // empty line
return line; // here line is not empty
}
我正在使用 StreamReader 读取文件。这些文件有时在其他行之间有空行。中间空行的数量可以是任意数量。让我的 StreamReader 跳过所有空行直到读取非空行的最佳方法是什么?
我有一个在 while 循环中调用的函数:
/// <summary>
/// Moves the stream to the next non-empty line, and returns it.
/// </summary>
/// <param name="srFile"></param>
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (String.IsNullOrWhiteSpace(line))
GetNextLine(srFile);
return line;
}
一切似乎都很好,但由于某种原因,这不起作用。每当行不为空时, return 行确实会被命中,但由于某种原因,会进行更多的递归 'GetNextLine()' 调用。谁能看出我做错了什么,或者提供解决方案?
您忘记了 return 递归调用的结果:
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (String.IsNullOrWhiteSpace(line))
return GetNextLine(srFile); // here, but can you spot infinite loop?
return line;
}
请注意,您还应该处理文件结尾。例如。 return null
如果到文件末尾没有非空行:
private string GetNextLine(StreamReader srFile)
{
string line = srFile.ReadLine();
if (line == null || !String.IsNullOrWhiteSpace(line))
return line;
return GetNextLine(srFile);
}
此解决方案避免递归并处理任意数量的空行:
private string GetNextLine(StreamReader srFile)
{
string line;
do
{
line = srFile.ReadLine();
if (line == null)
return null; // end of file
} while (line.Length == 0); // empty line
return line; // here line is not empty
}