J'essaie de lire un gros fichier une ligne à la fois. J'ai trouvé une question sur Quora qui traitait du sujet, mais il me manque quelques connexions pour que tout cela s'emboîte.
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
Le peu que je voudrais comprendre, c'est comment je pourrais lire une ligne à la fois à partir d'un fichier au lieu de STDIN comme dans cet exemple.
J'ai essayé:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
mais ça ne marche pas. Je sais que dans un pincement je pourrais revenir à utiliser quelque chose comme PHP, mais je voudrais comprendre cela.
Je ne pense pas que l'autre réponse fonctionnerait car le fichier est beaucoup plus volumineux que le serveur sur lequel je l'exécute dispose de mémoire.
if (line.length==1 && line[0] == 48) special(line);
node
les documents de l'API github.com/nodejs/node/pull/4609
fs.readSync()
. Vous pouvez lire des octets binaires dans un tampon, mais il n'y a pas de moyen facile de traiter les caractères UTF-8 ou UTF-16 partiels sans inspecter le tampon avant de le convertir en chaînes JavaScript et de rechercher les EOL. LeBuffer()
type n'a pas un ensemble de fonctions aussi riche pour fonctionner sur ses instances que les chaînes natives, mais les chaînes natives ne peuvent pas contenir de données binaires. Il me semble que l'absence d'un moyen intégré de lire les lignes de texte à partir de descripteurs de fichiers arbitraires est une véritable lacune dans node.js.