長いテキストファイルがたくさんあり、各ファイルの最初の行からデータを抽出するだけでよいと想像してください(それ以上のコンテンツを読む必要はありません)。 Node JSでそれを行うための最良の方法は何ですか?
ありがとう!
私はこのソリューションを採用することになりました。これは、これまでに見た中で最もパフォーマンスが高いようです。
_var fs = require('fs');
var Q = require('q');
function readFirstLine (path) {
return Q.promise(function (resolve, reject) {
var rs = fs.createReadStream(path, {encoding: 'utf8'});
var acc = '';
var pos = 0;
var index;
rs
.on('data', function (chunk) {
index = chunk.indexOf('\n');
acc += chunk;
index !== -1 ? rs.close() : pos += chunk.length;
})
.on('close', function () {
resolve(acc.slice(0, pos + index));
})
.on('error', function (err) {
reject(err);
})
});
}
_
便宜上、「 firstline "」という名前のnpmモジュールを作成しました。
String.prototype.slice()
の使用を提案してくれた@dandavisに感謝します!
これを試してください:
https://github.com/yinrong/node-line-stream-util#get-head-lines
ヘッドラインを取得したら、アップストリームのパイプを外します。
//どうぞ;
var lineReader = require('line-reader');
var async = require('async');
exports.readManyFiles = function(files) {
async.map(files,
function(file, callback))
lineReader.open(file, function(reader) {
if (reader.hasNextLine()) {
reader.nextLine(function(line) {
callback(null,line);
});
}
});
},
function(err, allLines) {
//do whatever you want to with the lines
})
}