2012-04-29 22 views
6

Zasadniczo mam plik tekstowy, który czytam i wyświetlam w polu tekstowym, co jest w porządku, ale chcę mieć możliwość przeszukaj tekst pod kątem określonego słowa i usuń cały wiersz tekstu, który zawiera to słowo. Mogę przeszukiwać tekst, aby zobaczyć, czy słowo istnieje, czy nie, ale nie mogę wymyślić, jak usunąć całą linię. Każda pomoc byłaby świetna.C# plik tekstowy wyszukaj konkretne słowo i usuń cały wiersz tekstu, który zawiera to słowo

Odpowiedz

14

Najłatwiej jest przepisać cały plik bez wiersza (-y) zawierającego słowo. Można użyć LINQ za to:

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

Jeśli chcesz tylko usunąć wszystkie wiersze zawierające słowo (nie tylko ciąg znaków), trzeba podzielić linię przez ' ':

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

Ach tak, to ma sens, użyłem tego w moim kodzie i zadziałało :) Dziękuję bardzo !! – user1364063

4

można to łatwo zrobić bez 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 jak mogę zrobić dla wielu słów ... to działało idealnie dla mnie .. Ale na jedno słowo .. Muszę poszukać jeszcze trzech słów .. Jak mogę to zrobić ... Dzięki –

1

Kod:

"przy użyciu System.Linq;" jest wymagane.

napisać własną metodę rozszerzenia IsNotAnyOf(,)(umieścić go w klasie statycznej) i wywołać metodę (czyli to nazywa) z .Where(n => n.IsNotAnyOf(...))...(); pętli for zwróci false, jeśli warunek jest spełniony, jeżeli nie metoda zwróci 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; 
} 
Powiązane problemy