大きなファイルを1行ずつ読み込もうとしています。この問題を扱ったQuoraに関する質問を見つけましたが、全体を一致させるためにいくつかの接続がありません。
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
このサンプルのように、STDINではなくファイルから一度に1行ずつ読み取る方法を理解したいと思います。
私は試した:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
しかし、それは機能していません。私はピンチでPHPのようなものにフォールバックできることを知っていますが、これを理解したいと思います。
私が実行しているサーバーがメモリを持っているサーバーよりもファイルが非常に大きいため、他の答えはうまくいかないと思います。
if (line.length==1 && line[0] == 48) special(line);
node
APIのドキュメントgithub.com/nodejs/node/pull/4609
fs.readSync()
。バイナリオクテットをバッファに読み込むことはできますが、バッファをJavaScript文字列に変換してEOLをスキャンする前にバッファを検査せずに、部分的なUTF-8またはUTF-16文字を処理する簡単な方法はありません。Buffer()
タイプは、ネイティブ文字列としてそのインスタンスを操作する機能の豊富なセットとして持っていませんが、ネイティブの文字列はバイナリデータを含めることはできません。任意のファイルハンドルからテキスト行を読み取る組み込みの方法がないことは、node.jsの実際のギャップのように思えます。