Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除带有特殊字符的行_C#_File_File Organization - Fatal编程技术网

C# 删除带有特殊字符的行

C# 删除带有特殊字符的行,c#,file,file-organization,C#,File,File Organization,我有这样一个文本文件: hello this is text file * Can you Tell me what is * Dnt Care * List item 你好 这是一个文本文件 *你能告诉我是什么吗 *Dnt护理 *列表项 我想删除所有带有星号(*)的行,因此删除后文件中的结果是: hello this is text file 你好 这是一个文本文件 LINQ使这变得简单: using System.IO; using System.Linq; ... File.W

我有这样一个文本文件:

hello this is text file * Can you Tell me what is * Dnt Care * List item 你好 这是一个文本文件 *你能告诉我是什么吗 *Dnt护理 *列表项 我想删除所有带有星号(*)的行,因此删除后文件中的结果是:

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);
请注意,因为它使用而不是,所以它将一次性将整个文件读入内存

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

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

读取文件中的行:

string[] lines = File.ReadAllLines(filename);
File.WriteAllLines(filename, filtered);
过滤掉带有星号的行:

string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();
将其余行写入文件:

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

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

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

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

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

这个
Regex
在*

前面有一个可选的空格,显然我上面的答案更好:)字符串数组的Where函数显示在哪里?@JeremyK:你需要
using
指令来
System.Linq
。我很高兴今天决定浏览,学到了一些新东西:)谢谢你,先生。