2012-04-29 35 views
6

基本的に私が読み込んで表示するリッチテキストボックスにはテキストファイルがありますが、特定の単語のテキストを検索し、この単語を含むテキストの行全体を削除します。私は、単語が存在するかどうかを確認するためにテキストを検索することができますが、私は行全体を削除する方法を見つけることができません。どんな助けも素晴らしいだろう。C#テキストファイル特定の単語を検索し、その単語を含むテキストの全行を削除します

答えて

14

最も簡単なのは、単語を含む行がないファイル全体を書き換えることです。あなたはそのためLINQを使用することができます。

var oldLines = System.IO.File.ReadAllLines(path); 
var newLines = oldLines.Where(line => !line.Contains(wordToDelete)); 
System.IO.File.WriteAllLines(path, newLines); 

あなただけ単語(文字列だけではなく)を含むすべての行を削除したい場合は、あなたが' 'で行を分割する必要があります。

var newLines = oldLines.Select(line => new { 
      Line = line, 
      Words = line.Split(' ') 
     }) 
     .Where(lineInfo => !lineInfo.Words.Contains(wordToDelete)) 
     .Select(lineInfo => lineInfo.Line); 
+0

ああ、完璧な意味で、私はちょうど私のコードでそれを使用しています:)ありがとう非常にありがとう! – user1364063

4

あなたはLINK

   string search_text = text; 
       string old; 
       string n=""; 
       StreamReader sr = File.OpenText(FileName); 
       while ((old = sr.ReadLine()) != null) 
       { 
        if (!old.Contains(search_text)) 
        { 
         n += old+Environment.NewLine; 
        } 
       } 
       sr.Close(); 
       File.WriteAllText(FileName, n); 
+0

@mMd Kamruzzaman Pallobどうすれば複数の単語を書くことができますか?これは私にとっては完璧に機能しました..しかし、一言で言えば、私はもっと3つの単語を探す必要があります。 –

1

コードなしで簡単にそれを行うことができます:

"using System.Linq;"必要とされている。

場合、条件が満たされた場合にはfalseを返しますforループザ・.Where(n => n.IsNotAnyOf(...))...();から(すなわち、それが呼ばれる)独自の拡張メソッドIsNotAnyOf(,)(静的クラスに入れて)を書くと方法を呼び出しますメソッドがtrueを返すわけではありません:

static void aMethod() 
{ 
    string[] wordsToDelete = { "aa", "bb" }; 
    string[] Lines = System.IO.File.ReadAllLines(TextFilePath) 
     .Where(n => n.IsNotAnyOf(wordsToDelete)).ToArray(); 
    IO.File.WriteAllLines(TextFilePath, Lines); 
} 

static private bool IsNotAnyOf(this string n, string[] wordsToDelete) 
{ for (int ct = 0; ct < wordsToDelete.Length; ct++) 
     if (n == wordsToDelete[ct]) return false; 
    return true; 
} 
関連する問題