Но я не хочу читать весь файл от начала до конца, но его части говорят от строки с номером 1 до 10000, от 20000 до 30000 и т. д.
Если ваши строки не имеют фиксированной одинаковой длины, НЕТ способа узнать, где начинается строка 10 000, без чтения с начала файла и подсчета строк, пока вы не дойдете до строки 10 000. Вот как работают текстовые файлы со строками переменной длины. Строки в файле не являются физическими структурами, о которых файловая система ничего не знает. Для файловой системы файл — это просто гигантский блок данных. Концепция строк — это то, что мы изобретаем на более высоком уровне, и поэтому файловая система или ОС ничего не знают о строках. Единственный способ узнать, где находятся строки, — прочитать данные и разбить их на строки, выполнив поиск разделителей строк. Таким образом, строка 10 000 находится только путем поиска разделителя 10 000-й строки, начиная с начала файла и считая.
Нет никакого способа обойти это, если вы предварительно не обработаете файл в более эффективный формат (например, базу данных) или не создадите индекс позиций строк.
В основном я хочу иметь возможность установить строку «начало» и «конец» для данного запуска моей функции.
Единственный способ сделать это — заранее проиндексировать данные, чтобы вы уже знали, где начинается/заканчивается каждая строка. Некоторые текстовые редакторы, предназначенные для работы с очень большими файлами, делают это. Они читают файл (возможно, лениво), считывая каждую строку, и строят в памяти индекс того, с какого смещения файла начинается каждая строка. Затем они могут получить определенные блоки строк, обратившись к индексу и прочитав этот набор данных из файла.
Это выполнимо с помощью readline и fs.createReadStream?
Без строк фиксированной длины невозможно узнать, где в файле начинается строка 10 000, не считая с самого начала.
Это большой файл (около 1 ГБ), и его загрузка в память вызывает ПРОБЛЕМЫ ПАМЯТИ.
Потоковая передача файла построчно с помощью модуля чтения строк или других, которые делают что-то подобное, прекрасно справятся с проблемой памяти, так что в любой момент времени в памяти находится только блок данных из файла. Таким образом вы можете обрабатывать произвольно большие файлы даже в системе с небольшой памятью.
person
jfriend00
schedule
01.07.2021