Как вставить текст через каждые несколько строк из огромного файла

У меня есть файл ASCII размером около 1 ГБ, моя задача здесь - писать фиксированный текст каждые 1000 строк.

например

Ожидаемый результат

text line 1
text line 2
text line 3
...
text line 999
text line 1000
// My fixed text
text line 1001
text line 1002

Попытка 1 - куча JavaScript вне памяти

Пытаться писать по одному байту за раз и отслеживать количество новых строк.

Напишите мой фиксированный текст каждые 1000 строк

let src = `/path/to/src`;
let dst = `/path/to/dst`;

let readStream = fs.createReadStream(src);
let writeStream = fs.createWriteStream(dst);
let newline = 0;

readStream.on('data', chunk => {
    for(let i in chunk) {
        let c = chunk[i];

        // write one byte at a time 
        writeStream.write(Buffer.from(chunk.buffer, i, 1))

        if (c == 10) {
            newline++;

            // write fixed text for every 1000th line
            if (newline && newline % 1000 == 0) {
                writeStream.write("My Fixed Text");
            }
        }
    }
}).on('end', () => {
    console.info('done');
});

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Попытка 2 - выходной файл зашифрован и не в порядке

То же, что и попытка 1, но записывает по одному байту из предварительно выделенного буфера.

let src = `/path/to/src`;
let dst = `/path/to/dst`;

let readStream = fs.createReadStream(src);
let writeStream = fs.createWriteStream(dst);
let newline = 0;
let buffer = Buffer.alloc(1);

readStream.on('data', chunk => {
    for(let i in chunk) {
        let c = chunk[i];

        buffer[0] = c;

        // write one byte at a time from my pre-allocated buffer
        writeStream.write(buffer)

        if (c == 10) {
            newline++;

            // write fixed text for every 1000th line
            if (newline && newline % 1000 == 0) {
                writeStream.write("My Fixed Text");
            }
        }
    }
}).on('end', () => {
    console.info('done');
});

Ошибок нет, скрипту потребовалось некоторое время для выхода после печати done.

Однако выходной файл выглядит полностью зашифрованным и не по порядку.

L,a'-etLL'7P62 ,,NL,n''he'L A,r'0et,L ,ei2'vrUb32oa0on' L,c27CirU 7' 2- tN Ng7Bha'0atLV7al'0e'pUbLe2,3 goLA0n'0,v',L9lc'1C,LI0Et0-m',UT5,nD1e''NU,On91arNE40r20ilHLVEn''''''''mwRL (3(0-r''NUB o00at S7Eo'7'clUR32 20vowL 64v80vaL 0,u00hNNUE4n,1'aa L 2 AC1p,,NU e2'Cit, 22y F8etLL56Ola-1C'NLS3n '3mrUS34nn1-CL,g5tw7ma'L)'4t60h'L

Эта задача кажется простой и понятной, но у меня возникают проблемы с ее выполнением.

Любая помощь приветствуется.

поиск предполагает, что поток записи не очищается перед закрытием файла, в результате чего движку js не хватает места в куче. grokbase.com/t/gg/nodejs/125e84345w/… (вне площадки), stackoverflow.com/q/48410361/5217142, stackoverflow.com/questions/43643467/… (на месте) и закрытая проблема на github github.com/nodejs/node-v0.x-archive/issues/7348, где упоминаются потоки преобразования, могут дать подсказки.

traktor 26.10.2018 14:56

Ах, поток преобразования - хорошее предложение, спасибо за направление

Neverever 27.10.2018 01:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
117
0

Другие вопросы по теме