Lit les lignes de manière synchrone à partir du fichier dans Node.js
J'ai besoin d'analyser un fichier ligne par ligne dans le format suivant avec Node.js:
13
13
0 5
4 3
0 1
9 12
6 4
5 4
0 2
11 12
9 10
0 6
7 8
9 11
5 3
Il représente un graphique. Les deux premières lignes sont le nombre d'arêtes et de sommets, suivi par les bords.
Je peux accomplir la tâche avec quelque chose comme:
var fs = require('fs');
var readline = require('readline');
var read_stream = fs.createReadStream(filename);
var rl = readline.createInterface({
input: read_stream
});
var c = 0;
var vertexes_number;
var edges_number;
var edges = [];
rl.on('line', function(line){
if (c==0) {
vertexes_number = parseInt(line);
} else if (c==1) {
edges_number = parseInt(line);
} else {
edges.push(line.split(' '));
}
c++;
})
.on('end', function(){
rl.close();
})
Je comprends ce genre de choses pourrait ne pas être ce Node.js a été pensé pour, mais la cascade if
dans le line
de rappel n'a pas vraiment l'air élégant /lisible pour moi.
Est-il un moyen de lire de façon synchrone lignes à partir d'un flux comme dans tout autre langage de programmation?
Je suis ouvert à utiliser des plug-ins si il n'y a pas une solution intégrée.
[MODIFIER]
Désolé, j'aurais du préciser que je voudrais éviter de charger tout le fichier en mémoire au préalable
source d'informationauteur Andrea Casaccia | 2015-12-11
Vous devez vous connecter pour publier un commentaire.
Mon code habituel partie pour de telles tâches simples:
lines
est un tableau de chaînes de caractères sans espace vide.Ce projet sur github.com fait exactement ce dont j'avais besoin:
https://github.com/nacholibre/node-readlines
Pourquoi ne pas tout lu dans un tableau et ensuite prendre les deux premiers éléments de l'épissure. Je suppose que votre exemple est beaucoup simplifié ou bien vous venez de lire l'intégralité du fichier en mémoire et de le découper. Si votre cas réels magasins de plusieurs graphiques et vous voulez faire quelque chose lorsque chacun d'eux est chargé, par exemple, vous pouvez mettre un test de votre ligne de l'événement
Personnellement, j'aime utiliser
événement-stream
de traiter avec des cours d'eau. Il n'est pas nécessaire ici, mais je l'ai utilisé pour l'exemple de code. C'est simple, je lis d'int et de mettre le tout à l'intérieuredges
puis lors de la lecture du fichier est fait, je prends le premier élément qui estvertexes_number
le nouveau premier élément estedges_number