Подсчет количества строк в файле C # - PullRequest
1 голос
/ 20 января 2010

Я хочу знать, сколько строк у меня в файле.Как я могу сделать это простым способом (я имею в виду, чтобы не проходить весь файл и считать каждую строку)?Есть команда для этого?

Ответы [ 4 ]

9 голосов
/ 20 января 2010

Хорошо:

int lines = File.ReadAllLines(path).Length;

довольно просто, но не очень эффективно для огромных текстовых файлов. Я бы, вероятно, использовал TextReader в большинстве случаев, чтобы избежать чрезмерной буферизации:

int lines = 0;
using (TextReader reader = File.OpenText(path)) {
    while (reader.ReadLine() != null) { lines++; }
}
4 голосов
/ 20 января 2010

Любая вызванная вами «функция» будет, по сути, делать то же самое - переходить по одной строке и подсчитывать количество символов новой строки.

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

0 голосов
/ 20 января 2010

Зависит от длины строки ... обычно самый быстрый способ сделать это, используя эту простую формулу - получить длину файла в байтах и ​​разделить на длину строки, например:

const int LINE_LENGTH = 80;
System.IO.FileInfo f = new System.IO.FileInfo(path);
int noLines = f.Length / LINE_LENGTH;

Выше предполагается, что длина строки составляет 80 символов в ширину ...

Если длина переменная, другого способа сделать это нет, кроме открытия файла и итерации по каждой строке и отслеживания количества строк.

Edit: Я только что понял гораздо более простой способ после того, как я разместил комментарий ниже .. Разве не было бы проще на самом деле использовать командную консоль в пространстве имен System.Diagnostics.Process для вызова grep -c "$(\r?\n?|\n)" с использованием аргумента в качестве пути к рассматриваемому файлу - это сделало бы ее более гибкой и может обслуживать любой файл. Единственное, что вам нужно сделать, это прочитать в выходных данных и пересмотреть его, чтобы получить фактическое количество строк, например, используя мой grep, поставляемый с Borland C, я получаю этот вывод

C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt
File 273.txt:
35 lines match

Выходные данные и пробег могут отличаться, переключение команды -c на grep означает 'count of'

0 голосов
/ 20 января 2010

Так или иначе (Regex, FileStream и т. Д.) Что-то, где-то придется проходить переводы строк.

...