Неважно, какой язык вы используете, вам придется читать весь файл, если строки имеют переменную длину. Это потому, что переводы строк могут быть где угодно, и нет никакого способа узнать об этом, не прочитав файл (при условии, что он не кэширован, что, вообще говоря, нет).
Если вы хотите указать прогресс, у вас есть два реалистичных варианта. Вы можете экстраполировать прогресс на основе предполагаемой длины строки:
assumed lines in file = size of file / assumed line size
progress = lines processed / assumed lines in file * 100%
, поскольку вы знаете размер файла. В качестве альтернативы вы можете измерить прогресс как:
progress = bytes processed / size of file * 100%
Этого должно быть достаточно.