C#文本文件搜索特定单词并删除包含该单词的整行文本

时间:2012-04-29 11:10:30

标签: c# search text-files

基本上我有一个文本文件,我读入并显示在一个富文本框中,这很好,但我希望能够在文本中搜索特定的单词并删除包含的整行文本这个词。我可以搜索文本以查看该单词是否存在,但我无法弄清楚如何删除整行。任何帮助都会很棒。

4 个答案:

答案 0 :(得分:17)

最简单的方法是重写整个文件而不包含包含该单词的行。您可以使用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);

答案 1 :(得分:5)

如果没有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);

答案 2 :(得分:2)

代码:

  

“使用System.Linq;”是必需的。

编写自己的扩展方法IsNotAnyOf(,) (将其置于静态类中)并从{{1}调用方法(即调用它)如果条件满足,for循环将返回false,否则方法将返回true:

.Where(n => n.IsNotAnyOf(...))...();

答案 3 :(得分:0)

我们可以将字符串转换为行数组,对其进行处理,然后再转换回去:

string[] dados_em_lista = dados_em_txt.Split(
                        new[] { "\r\n", "\r", "\n" },
                        StringSplitOptions.None
                    );

var nova_lista = dados_em_lista.Where(line => !line.Contains(line_to_remove)).ToArray();

dados_em_txt = String.Join("\n", nova_lista);