基本上我有一个文本文件,我读入并显示在富文本框中,这很好,但我希望能够在文本中搜索特定单词并删除包含该单词的整行文本。我可以搜索文本以查看该单词是否存在,但我无法弄清楚如何删除整行。任何帮助都会很棒。
问问题
24891 次
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(,)
(放在静态类中)并调用该方法 (即被调用) from.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 回答
1
我们可以将字符串转换为行数组,对其进行处理,然后再转换回来:
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);
于 2020-08-10T07:47:34.927 回答