删除具有特殊字符的行

时间:2013-03-20 19:30:41

标签: c# file file-organization

我有一个这样的文本文件:

hello
this is text file
 * Can you Tell me what is 
 * Dnt Care
 * List item

我想删除所有行都有星号(*)所以删除后的文件结果是:

hello
this is text file

4 个答案:

答案 0 :(得分:5)

LINQ让这一切变得简单:

using System.IO;
using System.Linq;

...

File.WriteAllLines("output.txt",
                   File.ReadLines("input.txt")
                       .Where(line => !line.Contains("*")));

或者作为两个陈述 - 它仍然是懒惰的,一次只读一行:

var query = File.ReadLines("input.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("output.txt", query);

如果您确实需要替换原始文件,您可以 使用上述内容然后删除原始文件并将新文件移动到位,(如果文件足够小)读取整个文件以开始:

var lines = File.ReadAllLines("file.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("file.txt", lines);

请注意,因为它使用ReadAllLines代替ReadLines,所以它会一次性将整个文件读入内存。

假设您使用的是.NET 4或更高版本。如果您只使用.NET 3.5,您仍然可以使用第二种形式,但是在将其写入之前需要将结果转换为数组:

var lines = File.ReadAllLines("file.txt")
                .Where(line => !line.Contains("*"))
                .ToArray();
File.WriteAllLines("file.txt", lines);

答案 1 :(得分:2)

假设您知道如何从文件中读取和写入内容,则可以使用Regex删除不需要的行。这样做的好处是它需要*位于行的开头,而不是仅存在于其中的任何位置。

Regex.Replace(fileContents, "(?m)(^\s*\*.*$)", "");

Regex在*。

前面有一个可选的空格数

答案 2 :(得分:1)

阅读文件中的行:

string[] lines = File.ReadAllLines(filename);

用星号过滤掉行:

string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();

将剩余的行写入文件:

File.WriteAllLines(filename, filtered);

答案 3 :(得分:0)

逐行逐行查看字符串是否包含*

while(Reader.CanRead())
{
   string currLine = reader.ReadLine();
   if(currLine.Contains("*") == false)
       list.Add(currLine);
}