等到 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执行操作?

等到 string.contains() 条件满足

仅当流只有一行时,您的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;
   }
}