Lecture ligne par ligne du fichier en JavaScript côté client

Pourriez-vous m'aider avec le problème suivant.

Objectif

Lire le fichier sur le côté client (dans le navigateur via JS et HTML5 classes), ligne par ligne, sans avoir à charger tout le fichier en mémoire.

Scénario

Je suis en train de travailler sur une page web qui doit analyser les fichiers sur le côté client. Actuellement, je suis en train de lire fichier tel qu'il est décrit dans ce l'article.

HTML:

<input type="file" id="files" name="files[]" />

JavaScript:

$("#files").on('change', function(evt){
    //creating FileReader
    var reader = new FileReader();

    //assigning handler
    reader.onloadend = function(evt) {      
        lines = evt.target.result.split(/\r?\n/);

        lines.forEach(function (line) {
            parseLine(...);
        }); 
    };

    //getting File instance
    var file = evt.target.files[0];

    //start reading
    reader.readAsText(file);
}

Le problème est que FileReader lit tout le fichier à la fois, ce qui provoque écrasé onglet pour les gros fichiers (taille >= 300 MO). À l'aide de reader.onprogress ne résout pas un problème, puisqu'il vient incréments de suite jusqu'à ce qu'il va frapper à la limite.

Inventer une roue

J'ai fait quelques recherches sur internet et n'ont pas trouvé de moyen simple de le faire (il y a des tas d'articles décrivant précisément cette fonctionnalité, mais sur le côté serveur pour node.js).

Comme seul moyen de le résoudre, je ne vois que des points suivants:

  1. Diviser le fichier en morceaux (via File.split(startByte, endByte) méthode)
  2. Trouver le dernier caractère de nouvelle ligne dans ce morceau ('/n')
  3. Lire ce morceau à l'exception de la partie après le dernier caractère de nouvelle ligne et de le convertir à la chaîne et divisé par des lignes
  4. Lire la partie suivante de départ à partir du dernier caractère de nouvelle ligne trouvé à l'étape 2

Mais je vais mieux utiliser quelque chose de déjà existant afin d'éviter la croissance de l'entropie.

InformationsquelleAutor Anton Purin | 2014-07-09