[英]Test if there's no more text in text file in c#
我的代码如下所示:
System.IO.StreamReader savednames =
new System.IO.StreamReader(@"c:\users\example\text.txt");
while ((line = savednames.ReadLine()) != null)
{
if (line == null)
{
Console.WriteLine("No more content!");
} }
(是的,当while为true时有代码,但是在这里不相关),这是行不通的,我在网上搜索了很多,但没有找到答案。 我想检查文本文档中的下一行是否为空,如果是,请说“ no more lines”或类似符号。该行既不为null,也不为“”。 希望能有所帮助!
发生这种情况的原因是,当到达文件末尾时,while循环的条件为false,并且未输入正文,因此不会打印该消息。
如下更改循环:
while (true)
{
var line = savednames.ReadLine();
if (line == null)
{
Console.WriteLine("No more content!");
break;
}
}
请注意,这仅在到达文件末尾时才终止循环。 它不会仅仅因为文件中的一行为空而终止它。
如果要在空行处终止循环,请使用:
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrEmpty(line))
{
Console.WriteLine("No more content!");
break;
}
}
如果您想在空行或空白行上终止循环,请使用:
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
Console.WriteLine("No more content!");
break;
}
}
这种循环结构在读取文件时非常普遍。 它被称为“半圈”。
请注意,可能有更好的方法来执行此操作,避免使用“半圈”(有些人不喜欢)。
例如,您可以使用File.ReadLines()
方法从文件中获取所有行,而无需进行缓冲:
foreach (string line in File.ReadLines(@"c:\users\example\text.txt"))
{
// Do something with line
}
Console.WriteLine("No more content!");
如果只想处理到第一条非空行(如上面的第二个循环示例),则可以这样编写:
var linesUntilFirstEmpty =
File.ReadLines(@"c:\users\example\text.txt")
.TakeWhile(line => !string.IsNullOrEmpty(line));
foreach (string line in linesUntilFirstEmpty)
{
// Do something with line
}
Console.WriteLine("No more content!");
如果要处理行直到第一个空白或为空,请执行以下操作:
var linesUntilFirstBlankOrEmpty =
File.ReadLines(@"c:\users\example\text.txt")
.TakeWhile(line => !string.IsNullOrWhiteSpace(line));
foreach (string line in linesUntilFirstBlankOrEmpty)
{
// Do something with line
}
Console.WriteLine("No more content!");
为了获得预期的输出,您需要更改while循环的条件。 像这样使while循环...
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrEmpty(line))
{
Console.WriteLine("No more content!");
break;
}
}
我希望这是您想要的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.