2013-03-20 2 views
-1

У меня есть текстовый файл, как это:Удалить строку с особым характером

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

Я хочу, чтобы удалить все строки имеют звездочку знак (*), поэтому результат в файле после делеции:

 
hello 
this is text file 

ответ

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); 
+0

Где вы можете найти функцию для отображения строкового массива? – JeremyK

+1

@JeremyK: Вам нужна директива 'using' для' System.Linq'. Добавьте это в ответ. –

+0

Так рад, что я решил посмотреть сегодня, узнал что-то новое :) Спасибо, сэр. – JeremyK

1

Прочитайте строки в файле:

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

фильтра из линии с звездочками:

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

Написать оставшиеся строки в файл:

File.WriteAllLines(filename, filtered); 
0

Просто идти построчно и посмотреть, если строка содержит *

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

Ясно, что ответы выше меня намного лучше :) – JeremyK

2

Предполагая, что вы знаете, как читать и писать содержимое из файла, вы можете использовать Regex, чтобы удалить строки, которые вы не хотеть. Это имеет то преимущество, что оно требует, чтобы * находился в начале строки, а не просто присутствовал где-нибудь на ней.

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

Это Regex имеет дополнительный ряд пробелов в передней части *.

Смежные вопросы