我有一個文本文件是這樣的:刪除行的特殊字符
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