общее количество строк файла (считая в обратном направлении) - PullRequest
1 голос
/ 07 июля 2011

Могу ли я посчитать количество строк в обратном направлении для данного файла?то есть начиная с EOF, считая строки до начала?

Я мог бы найти конец файла.Начните там с формы, продолжайте искать символ новой строки (указание новой строки) и продолжайте увеличивать мой счетчик line_number.Но каким должно быть мое конечное состояние?

Есть ли противоположность EOF?:)

Мое собственное предложение: если я ищу X-ю строку от конца, я всегда могу получить ее начиная с номера строки: total_lines - X --- достаточно справедливо?

Мотив: Я заинтересован в том, чтобы добраться до X-й строки из конца огромного (читай действительно огромного) файла.Итак, ищем наиболее оптимальное решение.

PS: Это не домашняя работа (хотя я учусь на всю жизнь: p)

Ответы [ 3 ]

4 голосов
/ 07 июля 2011

Когда я сделал это (например, написал грубый эквивалент стандарта tail), я прочитал блок с конца, посчитал строки в нем, если у меня не было достаточно строк, использовал fseek, чтобы вернуться назад и прочитать другой блок (но я не уверен, что последний когда-либо действительно случался, за исключением случаев, когда я заставлял это делать в тестировании).

1 голос
/ 07 июля 2011

Противоположностью EOF является pos == 0.

Хвостовая команда POSIX делает это;например, код см. http://www.koders.com/c/fid8DEE98A42C35A1346FA89C328CC3BF94E25CF377.aspx

0 голосов
/ 07 июля 2011

Если вы хотите напечатать строки в обратном направлении, вы можете использовать рекурсию для этого (не уверен, что вы подразумеваете под подсчетом, потому что подсчет количества строк одинаков как вперед, так и назад). Это звучит как домашнее задание для введения в C, поэтому я воздержусь от написания кода, но думаю об этом. Прочитайте строку, если это не EOF, рекурсивно прочитайте следующую строку, иначе напечатайте строку и вернитесь.

...