2012-04-18 3 views
0

У меня есть файл, который содержит много строк. Я использую средство чтения потоков, чтобы прочитать файл. Что мне нужно сделать, так это подсчет количества строк в этом файле, но в определенных точках файл содержит строку текста как таковую: «-----». Итак, что мне нужно сделать, это подсчитать количество строк в файле, исключая строки, содержащие «-----».Подсчет количества строк в файле, за исключением определенных строк

Я не хочу использовать StreamReader, как это:

StreamReader reader = new StreamReader(); 
var x = reader.ReadLine() 

и проверить, если х содержит «-----», и если это приращение счетчика, так как это очень интенсивно, как файл будет огромным файлом.

Любая помощь очень ценится.

Заранее спасибо.

+0

этот вопрос можно найти по адресу: http://stackoverflow.com/questions/119559/determine-the-number-of-lines-within-a-text-file –

ответ

1

Я хотел бы использовать:

var count = File.ReadLines("foo.txt") 
       .Count(line => !line.Contains("-----")); 

Обратите внимание, что File.ReadLines читает в потоковом режиме, так что это будет только на самом деле читать по одному.

Однако, что эффективно будет делать то, что вы описали себя не желающих сделать ... только в довольно красивее пути. Вы говорите, что это «очень интенсивно», но это в присуще работы. Если вы пытаетесь подсчитать количество строк, содержащих определенный шаблон, то у вас есть , получивший, чтобы прочитать каждую строку. Я не понимаю, как вы думаете, что этого можно избежать.

+0

Спасибо за это ... хорошо работает, но разве это невозможно сделать, не прочитывая каждую строку? – johnnie

+0

@johnnie: Как это может быть немного возможно? Каждая строка может потенциально увеличивать счетчик или нет. –

1

Попробуйте

File.ReadLines("path").Count (l => !l.Contains("-----")); 

ReadLines возвращает IEnumerable. Из-за ленивой оценки Linq весь файл не будет считаться в памяти, чтобы подсчитать количество строк.

Использование

File.ReadAllLines(...) 

который я ошибочно использовал в моем ответе первоначально бы прочитать весь файл в память.

+0

Это читает строки, содержащие ----. Но это должно быть наоборот. –

+0

Хорошо спасибо, исправит. – Phil

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