我有一个文本文件是这样的:删除行的特殊字符
hello this is text file * Can you Tell me what is * Dnt Care * List item
我想删除所有线路上有星号标记(*),这样的结果在删除后的文件是:
hello this is text file
我有一个文本文件是这样的:删除行的特殊字符
hello this is text file * Can you Tell me what is * Dnt Care * List item
我想删除所有线路上有星号标记(*),这样的结果在删除后的文件是:
hello this is text file
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);
读取文件中的行:
string[] lines = File.ReadAllLines(filename);
筛选出线路用星号:
string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();
写其余线路的文件:
File.WriteAllLines(filename, filtered);
一行刚去行,看看字符串包含*
while(Reader.CanRead())
{
string currLine = reader.ReadLine();
if(currLine.Contains("*") == false)
list.Add(currLine);
}
显然上面的答案好得多:) – JeremyK 2013-03-20 19:35:27
假设你知道如何读取和文件写入内容,你可以使用一个Regex
删除线你不想。这具有的优点是它要求*在行的开头,而不是在其上的任何地方。
Regex.Replace(fileContents, "(?m)(^\s*\*.*$)", "");
这个Regex
在*前面有一个可选的白色空格。
你在哪里得到Where函数显示字符串数组? – JeremyK 2013-03-20 19:37:54
@JeremyK:你需要''using'指令来指定'System.Linq'。将这个添加到答案中。 – 2013-03-20 19:38:21
很高兴我决定浏览今天,学到了新的东西:)谢谢先生。 – JeremyK 2013-03-20 19:39:05