2017-01-01 5 views
-3

本当にC#の新機能です。私はキーワードのテキストファイルを検索する必要があります。ファイル全体の後にを検索すると、、キーワードがメッセージボックスに表示されます。ファイル全体の後にを検索すると、、キーワードが見つかりません。メッセージボックスが表示されます。テキストファイルのC#検索

これまでのところ私はこれを持っています。問題は、ファイルを1行ずつ読み込むことです。最初の行にキーワードが見つからない場合は、「Not found」というアラートが表示されます。次に、次の行に進み、「見つかりません」と表示されます。等々。私は、ファイル全体を検索するためにスクリプトを必要とし、「見つからない」だけを1回だけ表示します。ありがとうございました!

string file = File.ReadAllText("path"); 

if (file.Contains(keyword))  { 
//.. 
} 
else { 
//.. 
} 

または1行に:

if (File.ReadAllText("path").Contains("path")) { 
} 
else { 
} 

などが述べられて

private void SearchButton_Click(object sender, EventArgs e) 
{ 
    System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt"); 
    String line; 
    String[] array; 
    while ((line = file.ReadLine()) != null) 
    { 
     if (line.Contains("keyword")) 
     { 
      MessageBox.Show("Keyword found!"); 
     } 
     else 
     { 
      MessageBox.Show("Keyword not found!"); 
     } 
    } 
} 
+0

[ReadToEnd'](https://msdn.microsoft.com/en-us/library/system.io.streamreader.readtoend(v = vs.110).aspx)を使用してファイル全体を読み取るだけですか? – UnholySheep

+3

何を試しましたか?ただちにメッセージボックスを表示しないようにすることもできますが、ループの後にチェックする変数に結果を保存してください。 – CodeCaster

+0

ファイルを読み込んで非同期的に検索することを検討するべきです(スレッド、スレッドプール、バックグラウンドワーカーまたはより良いasync/awaitメカニズム)。 – honzakuzel1989

答えて

0

File.ReadAllTextは、あなたが1つの文字列に一度、すべてのテキストを読み込むことができ、そのために適していますコメントでは、非常に大きなファイルのためにメモリが不足する可能性がありますが、通常の日常的な使用ではこれは起こりません。

+1

は大容量のファイルには適していないと付け加えてください。 –

+2

プログラミングを始めたばかりの人に、コードを使うべきかどうか、またそのコードの欠点について説明せずに_ "代わりにこのコードを使う" – CodeCaster

+0

ServéLaurijssenありがとう、素晴らしい作品! – Malasorte

1

代わりに(あなたはリソース漏れを防ぐためにDisposeに持っている)読者Fileクラスを使用してみてください:

bool found = File 
    .ReadLines("c:\\test.txt") // Try avoid "All" when reading: ReadAllText, ReadAllLines 
    .Any(line => line.Contains("keyword")); 

if (found) 
    MessageBox.Show("Keyword found!"); 
else 
    MessageBox.Show("Keyword not found!"); 

(あなたがStreamReaderを主張する場合)あなたのコードを修正:

private void SearchButton_Click(object sender, EventArgs e) { 
    // Wra IDisposable (StreamReader) into using in order to prevent resource leakage 
    using (file = new StreamReader("c:\\test.txt")) { 
    string line; 

    while ((line = file.ReadLine()) != null) 
     if (line.Contains("keyword")) { 
     MessageBox.Show("Keyword found!"); 

     return; // Keyword found, reported and so we have nothing to do 
     } 
    } 

    // File read with no positive result 
    MessageBox.Show("Keyword not found!"); 
} 
関連する問題