sio:bloc1:td1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
sio:bloc1:td1 [2026/10/09 00:38] – créée jcheronsio:bloc1:td1 [2026/10/09 00:48] (Version actuelle) – [Partie E (bonus) : Lire et écrire des fichiers] jcheron
Ligne 310: Ligne 310:
 ---- ----
  
-===== Bilan =====+===== Partie E (bonus) : Lire et écrire des fichiers =====
  
-  - Choisissez l'un des exercices de la séance et améliorez-le à votre idée (nouveau cas, message personnalisé, contrôle de saisie...). +Jusqu'ici, vos programmes « oublient » tout à la fin de leur exécution. Avec le module ''fs'' (inclus dans Node.js, rien à installer), un programme peut écrire et relire des fichiers. 
-  - Répondez par écrit : + 
-    * Quelle différence entre ''const'' et ''let'' ? +<sxh javascript> 
-    * Pourquoi ''prompt()'' nécessite-t-il une conversion avec ''Number()'' ? +const fs = require("fs"); 
-    * Dans quel cas utiliser une boucle plutôt que recopier des lignes ? + 
-    * Qu'apporte une fonction ?+fs.writeFileSync("test.txt", "Bonjour\n");       // crée ou ÉCRASE le fichier 
 +fs.appendFileSync("test.txt", "Ligne ajoutée\n"); // ajoute à la fin 
 +const contenu = fs.readFileSync("test.txt", "utf8"); 
 +console.log(contenu); 
 +console.log(fs.existsSync("test.txt"));           // true ou false 
 +</sxh> 
 + 
 +**Attention** 
 +  * ''writeFileSync'' écrase le contenu existant sans prévenir. 
 +  * Les chemins sont relatifs au dossier depuis lequel vous lancez ''node'', pas à celui du script. 
 +  * Lire un fichier qui n'existe pas provoque une erreur : testez d'abord avec ''fs.existsSync()''. 
 + 
 +---- 
 + 
 +==== Exercice 14 : Meilleur score du nombre mystère ==== 
 + 
 +**Énoncé** 
 +Reprenez votre programme du nombre mystère (exercice 11) et ajoutez la mémorisation du meilleur score dans un fichier ''score.txt''. 
 + 
 +  - Au démarrage, si ''score.txt'' existe, lisez-le et affichez : ''Meilleur score actuel : X essais''. Sinon, n'affichez rien. 
 +  - Pensez à convertir le contenu lu avec ''Number()''. 
 +  - À la fin de la partie, comparez le nombre d'essais au meilleur score : 
 +    * si le fichier n'existe pas, ou si le score de la partie est meilleur (plus petit), écrivez-le dans ''score.txt'' et affichez ''Nouveau record !'' ; 
 +    * sinon, ne modifiez pas le fichier. 
 +  - Lancez le programme plusieurs fois de suite et vérifiez que le record est bien conservé entre deux exécutions. 
 + 
 +**Résultat attendu** (deuxième lancement) : 
 +<code> 
 +Meilleur score actuel : 7 essais 
 +Devinez le nombre entre 1 et 100 : ... 
 +</code> 
 + 
 +**Défi** : supprimez ''score.txt'' à la main et relancez : le programme ne doit pas planter. 
 + 
 +---- 
 + 
 +==== Exercice 15 : Analyse d'un fichier de log ==== 
 + 
 +**Préparation** 
 +Créez un fichier ''serveur.log'' avec le contenu suivant (recopiez-le tel quel) : 
 +<code> 
 +2026-10-08 08:01:12 INFO Démarrage du serveur 
 +2026-10-08 08:03:45 INFO Connexion de alice 
 +2026-10-08 08:15:02 ERROR Échec de connexion pour bob 
 +2026-10-08 08:15:30 WARNING Disque à 85% 
 +2026-10-08 08:17:11 ERROR Échec de connexion pour bob 
 +2026-10-08 08:20:00 INFO Connexion de carole 
 +2026-10-08 09:02:33 ERROR Timeout base de données 
 +2026-10-08 09:05:10 INFO Sauvegarde terminée 
 +</code> 
 + 
 +**Énoncé** 
 +Écrivez un programme ''ex15.js'' qui : 
 +  - lit le fichier ''serveur.log'' ; 
 +  - découpe son contenu en lignes avec ''contenu.split("\n")'' ; 
 +  - parcourt les lignes avec une boucle ''for'' ; 
 +  - compte les lignes contenant ''INFO'', celles contenant ''WARNING'' et celles contenant ''ERROR'' (utilisez ''ligne.includes("ERROR")'') ; 
 +  - affiche : 
 +<code> 
 +INFO : 4 
 +WARNING : 1 
 +ERROR : 3 
 +</code> 
 +  - affiche ensuite uniquement les lignes d'erreur, précédées de leur numéro de ligne. 
 + 
 +**Questions** 
 +  - Que se passe-t-il si une ligne vide termine le fichier ? Comment l'ignorer ? 
 +  - En quoi ce type de programme est-il utile à un administrateur système ? 
 + 
 +**Défi** : écrivez les lignes ''ERROR'' dans un nouveau fichier ''erreurs.log'' avec ''fs.appendFileSync'' dans la boucle. 
 + 
 +---- 
 + 
 +==== Exercice 16 : Sauvegarder des données en JSON ==== 
 + 
 +**Énoncé** 
 +Écrivez un programme ''ex16.js'' qui gère une liste de contacts : 
 +  - Au démarrage, si ''contacts.json'' existe, chargez-le avec ''JSON.parse(fs.readFileSync("contacts.json", "utf8"))''. Sinon, partez d'un tableau vide ''[]''. 
 +  - Affichez le nombre de contacts déjà enregistrés. 
 +  - Demandez un nom et un téléphone à l'utilisateur, puis ajoutez le contact au tableau avec ''contacts.push({ nom: nom, tel: tel })''. 
 +  - Répétez tant que l'utilisateur ne saisit pas un nom vide. 
 +  - À la fin, sauvegardez le tableau avec ''fs.writeFileSync("contacts.json", JSON.stringify(contacts, null, 2))''. 
 +  - Affichez la liste complète des contacts. 
 + 
 +**Vérification** 
 +  - Lancez le programme, ajoutez deux contacts, quittez. 
 +  - Relancez-le : les deux contacts doivent être présents. 
 +  - Ouvrez ''contacts.json'' dans un éditeur de texte et observez le format. 
 + 
 +**Question** : quelles sont les limites de cette solution par rapport à une base de données (pensez à deux utilisateurs en même temps, à la recherche, à la taille) ?
  
 ---- ----
  • sio/bloc1/td1.1791499130.txt.gz
  • Dernière modification : il y a 9 heures
  • de jcheron