Попадание в пределы моего понимания здесь. У меня есть большой текстовый файл, который мне нужно разделить на куски 200 строк каждый (используйте mime.types для практики). Я использую readline
, но он, кажется, игнорирует мои операторы pause/resume
. Что мне не хватает:Разбиение текстового файла на основе количества строк в узле.js
// Splits a given file into smaller subfiles by line number
var infileName = 'mime.types';
var fileCount = 1;
var count = 0;
var fs = require('fs');
var outfileName = infileName + '.' + fileCount;
var inStream = fs.createReadStream(infileName);
var outStream = fs.createWriteStream(outfileName);
var lineReader = require('readline').createInterface({
input: inStream
});
lineReader.on('line', function(line) {
count++;
lineReader.pause();
outStream.write(line + '\n');
if (count >= 200) {
fileCount++;
console.log('file ', outfileName, count);
outStream.close();
outfileName = infileName + '.' + fileCount;
outStream = fs.createWriteStream(outfileName);
count = 0;
}
lineReader.resume();
});
lineReader.on('close', function() {
if (count > 0) {
console.log('Final close:', outfileName, count);
}
inStream.close();
outStream.close();
console.log('Done');
});
Я также попытался поставить изменение потока в функции обратного вызова операции записи:
lineReader.on('line', function(line) {
count++;
lineReader.pause();
outStream.write(line + '\n', function() {
if (count >= 200) {
fileCount++;
console.log('file ', outfileName, count);
outStream.close();
outfileName = infileName + '.' + fileCount;
outStream = fs.createWriteStream(outfileName);
count = 0;
}
lineReader.resume();
});
});
Результат одинаков в обоих случаях:
node split file mime.types.1 1588 Done
В идеале я хочу решение, которое не полагается на дополнительные npm
Какие Readline вы используете? ядро или https://www.npmjs.com/package/readline? – Ludo
Ядро только. Удивительно, если это разрешимо с помощью ядра – stwissel
Сколько раз отправляется событие линии? Можете ли вы установить точку останова? – Ludo