9

基本的に、読み込んでリッチ テキスト ボックスに表示するテキスト ファイルがありますが、これは問題ありませんが、テキスト内で特定の単語を検索し、この単語を含むテキスト行全体を削除できるようにしたいと考えています。テキストを検索して単語が存在するかどうかを確認できますが、行全体を削除する方法がわかりません。どんな助けでも素晴らしいでしょう。

4

4 に答える 4

19

最も簡単なのは、単語を含む行を含まないファイル全体を書き直すことです。あなたはそのために使うことができます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);
于 2012-04-29T11:18:34.260 に答える
7

なくても簡単にできます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);
于 2012-04-29T12:06:13.950 に答える
2

コード:

「System.Linq を使用して;」必要とされている。

独自の拡張メソッドを作成IsNotAnyOf(,) し (静的クラスに配置)、メソッドを呼び出します (つまり、呼び出されます).Where(n => n.IsNotAnyOf(...))...();。条件が満たされた場合、for ループは false を返します。そうでない場合、メソッドは 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;
}
于 2013-06-27T02:53:20.210 に答える