Estou tentando ler um arquivo grande, uma linha por vez. Encontrei uma pergunta no Quora que tratava do assunto, mas estou perdendo algumas conexões para fazer a coisa toda se encaixar.
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
O pouco que eu gostaria de descobrir é como eu poderia ler uma linha de cada vez de um arquivo em vez de STDIN, como neste exemplo.
Eu tentei:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
mas não está funcionando. Eu sei que em uma pitada eu poderia voltar a usar algo como PHP, mas eu gostaria de descobrir isso.
Eu não acho que a outra resposta funcionaria, pois o arquivo é muito maior do que o servidor no qual estou executando ele tem memória.
if (line.length==1 && line[0] == 48) special(line);
node
's docs API github.com/nodejs/node/pull/4609
fs.readSync()
. Você pode ler octetos binários em um buffer, mas não há maneira fácil de lidar com caracteres UTF-8 ou UTF-16 parciais sem inspecionar o buffer antes de convertê-lo em strings JavaScript e procurar EOLs. OBuffer()
tipo não possui um conjunto de funções tão rico para operar em suas instâncias quanto as cadeias nativas, mas as cadeias nativas não podem conter dados binários. Parece-me que a falta de uma maneira integrada de ler linhas de texto de manipuladores de arquivos arbitrários é uma lacuna real no node.js.