2012-04-29 257 views
6

Básicamente tengo un archivo de texto que leo y se muestra en un cuadro de texto enriquecido, lo cual está bien, pero luego quiero poder busca en el texto una palabra específica y elimina toda la línea de texto que contiene esta palabra. Puedo buscar a través del texto para ver si la palabra existe o no, pero no puedo entender cómo eliminar toda la línea. Cualquier ayuda sería genial.Archivo de texto C# buscar palabra específica y eliminar toda la línea de texto que contiene esa palabra

Respuesta

14

Lo más fácil es volver a escribir todo el archivo sin la (s) línea (s) que contiene la palabra. Puede utilizar LINQ para ello:

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

Si sólo desea eliminar todas las líneas que contienen la palabra (no sólo la secuencia de caracteres), es necesario dividir la línea de ' ':

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

Ah sí, tiene perfecto sentido, lo acabo de usar en mi código y funcionó :) ¡Muchas gracias! – user1364063

4

puede hacerlo fácilmente sin 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, ¿cómo puedo hacer para varias palabras ... esto funcionó perfectamente para mí .. Pero para una sola palabra ... Tengo que buscar tres palabras más ... ¿Cómo puedo hacer esto ... Gracias –

1

Código:

"using System.Linq;" es requerido.

Escribir su propio método de extensión IsNotAnyOf(,)(ponerlo en una clase estática) y llame al método (es decir, que se llama) de .Where(n => n.IsNotAnyOf(...))...(); El ciclo for devolverá false si se cumple la condición, si no el método volverá verdadero:

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; 
} 
Cuestiones relacionadas