等到 string.contains() 条件满足
本文关键字:条件 满足 string contains 等到 | 更新日期: 2023-09-27 17:56:23
我正在将文件读取到我的 C# 应用程序并使用 gzip 流解压缩tile_data BLOB。我目前正在通过此方法访问 BLOB 数据:
SQLiteCommand command = new SQLiteCommand(query, DbConn);
SQLiteDataReader reader = command.ExecuteReader();
bool isMet = false;
while (reader.Read())
{
using (var file = reader.GetStream(0))
using (var unzip = new GZipStream(file, CompressionMode.Decompress))
using (var fileReader = new StreamReader(unzip))
{
var line = fileReader.ReadLine();
while (!fileReader.EndOfStream)
{
}
Console.WriteLine("End of tile_data");
}
}
reader.Close();
Console.WriteLine("Reader closed");
Console.ReadKey();
}
catch (Exception e)
{
Console.Write(e.StackTrace);
Console.ReadKey();
}
我希望等到fileReader
检测到"tertiary"
(字符串),然后打印所有数据。我尝试使用bool
和嵌套while loop
但它作为无限循环返回,因此提出了问题。
我使用(并失败)的代码:
if (line.Contains("tertiary"))
{
isMet = true;
}
while (!fileReader.EndOfStream && isMet)
{
Console.WriteLine(line);
}
满足条件后,如何仅使用fileReader
执行操作?
仅当流只有一行时,您的fileReader.EndOfStream
循环才有效。问题是你只从流中读取一次 - 所以除非你已经阅读了整个内容,否则你处于一个无限循环中。
相反,请执行如下操作:
string line;
while ((line = fileReader.ReadLine()) != null)
{
if (line.Contains("...")) break; // Or whatever else you want to do
}
您可以使用
此代码。它查找字符串中的任何字符。它正在为我工作。
string matchStr = "tertiary";
if (line.Any(matchStr.Contains)
{
isMet = true;
}
while (!fileReader.EndOfStream && isMet)
{
Console.WriteLine(line);
}
var line = fileReader.ReadLine();
while 循环中的行?
while (!fileReader.EndOfStream)
{
var line = fileReader.ReadLine();
// do some other stuff
}
试试这样的事情
var yourval;
var secval = fileReader.ReadLine()
while ((yourval = secval ) != null)
{
if (line.Contains("your string here"))
{
break;
}
}