Я ищу, чтобы обработать текстовый файл с узлом, используя вызов командной строки, как:
node app.js < input.txt
Каждая строка файла должна обрабатываться индивидуально, но после обработки входная строка может быть забыта.
Используя прослушиватель данных stdin, я получаю входной поток, разделенный на части в байтах, поэтому я настроил это.
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lingeringLine = "";
process.stdin.on('data', function(chunk) {
lines = chunk.split("\n");
lines[0] = lingeringLine + lines[0];
lingeringLine = lines.pop();
lines.forEach(processLine);
});
process.stdin.on('end', function() {
processLine(lingeringLine);
});
Но это выглядит так неряшливо. Необходимость массировать вокруг первых и последних элементов массива линий. Нет ли более элегантного способа сделать это?
process.stdout
на другой записываемый поток - это может быть так же просто, какoutput: new require('stream').Writable()
node app.js < input.txt > output.txt
.terminal: false
createInterface, это решит эту проблему.источник
Error: EISDIR: illegal operation on a directory, fstat at
tryStatSync (fs.js: 534: 13) `fs.readFileSync(0).toString()
readline
специально предназначен для работы с терминалом (то естьprocess.stdin.isTTY === true
). Существует множество модулей, которые предоставляют функции разделения для общих потоков, например, split . Это делает вещи супер-легкими:источник
.on('end', doMoreStuff)
после первой.on()
. Помните, что если вы просто пишете код обычно после оператора with.on()
, этот код будет выполняться до того, как будет прочитан любой ввод, потому что JavaScript не является синхронным.источник
делиться для других:
читать поток за строкой, должно быть хорошо для больших файлов, передаваемых в stdin, моя версия:
источник
В моем случае программа (elinks) возвращала строки, которые выглядели пустыми, но на самом деле имели специальные терминальные символы, коды управления цветом и backspace, поэтому
grep
варианты, представленные в других ответах, не работали для меня. Поэтому я написал этот небольшой скрипт в Node.js. Я назвал файлtight
, но это просто случайное имя.источник