2016-07-11 6 views
0

私はC#アプリケーションにファイルを読み込み、gzipストリームを使ってtile_data BLOBを解凍しています。私は現在、この方法でBLOBデータにアクセスしています:string.contains()の条件が満たされるまで待ちます

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で操作を行うことができますか?

+0

チェックの答えのようなものを試してみてください。それがあなたのために働いているかどうかを教えてください。 – Developer

+0

whileループでは、fileReaderを読み書きしていないので、ストリームの最後に到達することはなく、whileは無限になります。進んで読み続けるには、あなたのwhileに 'line = fileReader.ReadLine()'を囲む必要があります。 – BasiK

答えて

1

fileReader.EndOfStreamループはストリームに1行しかない場合にのみ機能します。問題はストリームから一度しか読んでいないということです。すでに読んでいない限り、無限ループに入っています。

string line; 

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

var line = fileReader.ReadLine();はwhileループの中にありますか?

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

おっと、それは以前だったけど、ここに投稿する前にそれを戻すのを忘れて、いくつかのことを試していた。ありがとう:) –

1

あなたはこのコードを使用することができます:

代わりに、このような何かを行います。それは文字列内の任意の文字を見つける。それは私のために働いています。

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

この

var yourval; 
var secval = fileReader.ReadLine() 

while ((yourval = secval) != null) 
{ 
    if (line.Contains("your string here")) 
    { 
     break; 
    } 
} 
関連する問題