Brève:
Un système qui charge les fichiers CSV, mais ils devraient être énormes (lignes + 1M). J'ai déjà une idée sur la façon de les traiter en utilisant les files d'attente et les tâches/tâches d'arrière-plan.Comment connaître le nombre de lignes dans un fichier sans charger son contenu dans la mémoire en JavaScript?
Mais,
Je veux afficher à l'utilisateur un progrès dans son dossier, la ligne de quelque chose: 2165 de 1.246.875 ou peut-être le pourcentage de celui-ci. Pour archiver cela, j'ai besoin de connaître le nombre de lignes dans le fichier, mais je dois le faire sans charger son contenu dans la mémoire, donc il peut être rapide, dès que je reçois un téléchargement et peut enregistrer le nom de fichier dans le des lignes totales y sont trouvées.
En PHP cela est possible en utilisantSplFileObject
essayant de seek()
au PHP_MAX_INT
, il va à la plus haute ligne, il peut dans le fichier et key()
rendements ligne.
Mais le système est en cours de construction entièrement dans JavaScript/Node.js donc, par commodité, je veux aussi construire cette partie du système en JavaScript.
Comment pourrais-je accomplir cela? Déjà jeté un coup d'oeil à FS API, mais n'a pas trouvé comment à cela.
[EDIT]
Idées jusqu'à présent:
child_process.exec
+wc -l
(Unix uniquement)- obtenir cette information du client à l'aide
FileReader
(ressources délégué à l'utilisateur)
Vous pouvez lire certaines premières lignes, calculer la taille moyenne de la ligne et diviser la taille du fichier. –
Quelqu'un me corrige si je me trompe, mais si vous lisez le fichier async et ne spécifiez pas un encodage de fichier, vous ne gérez que les morceaux, n'est-ce pas? Alors pourriez-vous compter les sauts de ligne dans chaque morceau et laisser le morceau récupérer les ordures? –
Vous n'avez pas besoin de compter les lignes. Gardez une trace du nombre d'octets traités et divisez-le par la longueur du fichier pour connaître la quantité du fichier que vous avez déjà traité. Multipliez par 100 pour l'exprimer en pourcentage. – axiac