等到string.contains()条件满足

时间:2016-07-11 11:46:44

标签: c# loops

我正在将文件读取到我的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执行操作?

4 个答案:

答案 0 :(得分:1)

只有当您的信息流只有一行时,您的fileReader.EndOfStream循环才有效。问题是你只能从流中读取一次 - 所以除非你已经阅读了整个内容,否则你将无限循环。

相反,做这样的事情:

string line;

while ((line = fileReader.ReadLine()) != null)
{
  if (line.Contains("...")) break; // Or whatever else you want to do
}

答案 1 :(得分:1)

您可以使用此代码。它在字符串中找到任何字符。它对我有用。

string matchStr = "tertiary";
                if (line.Any(matchStr.Contains)
                            {
                                isMet = true;
                            }
                            while (!fileReader.EndOfStream && isMet)
                            {
                                Console.WriteLine(line);
                            }

答案 2 :(得分:0)

var line = fileReader.ReadLine();行是否在while循环中?

while (!fileReader.EndOfStream)
{
     var line = fileReader.ReadLine();
     // do some other stuff
}

答案 3 :(得分:0)

尝试这样的事情

var yourval;
var secval = fileReader.ReadLine()

while ((yourval = secval ) != null)
{
   if (line.Contains("your string here")) 
   {
      break;
   }
}