Cet article est enregistré par un étudiant étudiant JS au lieu d'un mémo. Ne vous attendez pas au contenu.
Cette fois, ce sera fait sur Ubuntu, alors démarrez l'environnement virtuel avec iTerm2.
Où ça a commencé
Accédez au répertoire dans lequel Ubuntu est installé. vagrant up est une commande pour démarrer Ubuntu installé sur un PC virtuel, et vagrant ssh se connecte à SSH avec l'ensemble de machines virtuelles Vagrant.
'use strict';
const filesystem=require('fs');
const readline=require('readline');
const rs =fs.createReadStream('nom de fichier');
const rl=readline.createInterface({input:rs, output:{}});
const prefectureDataMap = new Map();
rl.on('line', lines =>{
console.log(lines);
});
La première ligne est une description de l'utilisation de JS en mode strict.
Les deuxième et troisième lignes appellent le module dans Node.js avec require. require est un module npm (Node Package Manager) qui vous permet d'utiliser des extensions. Vous pouvez affecter un module à une variable et l'utiliser dans JS avec la description suivante.
Le module appelé cette fois est fs (système de fichiers) pour gérer les fichiers et readline pour lire les fichiers ligne par ligne.
La quatrième ligne utilise un flux pour lire le fichier et l'affecter à une variable appelée rs. En plus de cela, le module fs dispose également de fonctions telles que fs.readFileSync qui lisent les données de manière synchrone.
La 5ème ligne est définie comme suit à l'aide d'un module (readline) qui peut lire le flux ligne par ligne.
const rl = readline.createInterface({
//Définition du flux que vous souhaitez lire
input: rs,
//Paramètres du flux que vous souhaitez exporter
output: {}
});
La 6ème ligne utilise un objet Map pour gérer une combinaison de clés et de valeurs. Ici, l'objet Map est affecté à la variable et l'objet Map est nouvellement initialisé.
La 7ème ligne est un objet appelé rl, qui déclenche la fonction suivante lorsqu'un événement appelé line se produit. Cette fois, les lignes d'argument sont affichées sur la console.
La fonction passée à la méthode on sur la 6ème ligne a été modifiée comme suit.
rl.on('line', lines => {
const cutline = lines.split(',');
const year = parseInt(cutline[0]);
const prefecture = cutline[1];
const popu = parseInt(cutline[3]);
if (year === 2010 || year === 2015) {
let vofmap = prefectureDataMap.get(prefecture);
if (!vofmap) {
vofmap = {
p10: 0,
p15: 0,
change: null
};
}
if (year === 2010) {
vofmap.p10 = popu;
}
if (year === 2015) {
vofmao.p15 = popu;
}
prefectureDataMap.set(prefecture, value);
}
});
La méthode split () sur la deuxième ligne divise String en un tableau de chaînes en le divisant par la chaîne de délimitation spécifiée. L'utilisation de la méthode est la suivante.
Chaîne.sprit(Délimiteur spécifié)
A partir de la 3ème ligne, une partie du tableau créé à partir de la chaîne de caractères est affectée à la variable. parseInt () analyse un argument de chaîne et renvoie une valeur entière de la base spécifiée (base de la notation mathématique). En termes simples, ce qui était une valeur de chaîne de caractères a été remplacé par un nombre (valeur entière) pour la rendre plus facile à gérer.
À partir de la 6ème ligne, le programme suivant s'exécute uniquement lorsque la variable a la valeur spécifiée à l'aide de l'instruction if.
La 7ème ligne récupère la valeur de clé tout en spécifiant la clé sur la carte. Voir ci-dessous pour savoir comment écrire
Nom de la carte.get(Nom de la clé);
Sur la 8ème ligne, si aucune valeur n'est spécifiée pour le nom de clé, la valeur correspondant au nom de clé est attribuée pour la première fois.
J'expliquerai cette partie après la 9ème ligne.
vofmap.p10 = popu;
}
if (year === 2015) {
vofmao.p15 = popu;
}
prefectureDataMap.set(prefecture, value);
}
});
Ici, il est affecté à chaque objet de la valeur correspondant au nom de clé créé précédemment dans l'objet Map. Ensuite, la clé et la valeur définies sont enregistrées dans la carte précédente. Voir ci-dessous pour savoir comment écrire
Nom de la carte.set(Nom de la clé,valeur)
Le contenu suivant est décrit à la fin.
rl.on('close', () => {
for (let [key, vofmap] of prefectureDataMap) {
vofmap.change = vofmap.popu15 / vofmap.popu10;
}
const rankingArray = Array.from(prefectureDataMap).sort((pair1, pair2) => {
return pair2[1].change - pair1[1].change;
});
const rankingStrings = rankingArray.map(([key, value]) => {
return (
key +
': ' +
value.popu10 +
':' +
value.popu15 +
':'+
value.change
);
});
console.log(rankingStrings);
});
La première ligne est la même que précédemment et la fonction suivante est déclenchée lorsque l'événement appelé close se produit dans l'objet appelé rl.
Les 2e à 4e lignes utilisent la syntaxe for ~ of pour boucler le nom de la clé et la valeur correspondante pour la carte appelée prefectureDataMap. Après cela, un nouvel objet appelé changement est créé dans la carte et la valeur applicable est attribuée.
La 5ème ligne est convertie en tableau après avoir exécuté la fonction. Cette fois, le tri permet de modifier l'ordre en fonction de la taille de la valeur de la fonction de rappel. Voir ci-dessous pour la méthode de description.
Array.from(Objectif de conversion,une fonction{})
La 9ème ligne utilise la fonction de carte. Il est différent de celui qui utilise le nom de la clé, etc. La fonction map transforme chaque élément du tableau en le contenu auquel la fonction donnée est appliquée. Cette fois, tout est converti sous forme de chaîne de caractères.
nom de fichier JS du nœud
Si ce qui précède est exécuté et qu'aucune erreur ne se produit dans REPL, cela réussit. Je vous remercie pour votre travail acharné! !!
Lorsqu'il s'agit de données très volumineuses, si toutes les données sont chargées dans la mémoire à la fois, la mémoire peut devenir serrée et les performances du programme peuvent se détériorer. Dans de tels cas, utilisez des flux. Un flux est un flux qui peut progressivement lire, écrire et transformer des données.
Recommended Posts