Visualizzazione post con etichetta asynchronous. Mostra tutti i post
Visualizzazione post con etichetta asynchronous. Mostra tutti i post

martedì, dicembre 02, 2014

Esercitazioni su node.js: esercizio 4

Testo dell'esercizio
Creare un programma che stampi a video il contenuto di una cartella filtrato per estensione del file.
Il programma  accetterà da linea di comando, il percorso della cartella come primo argomento e l'estensione dei file da filtrare come secondo parametro.
Ad esempio, invocando node program.js c:/test txt, il programma visualizzerà la lista dei file della cartella c:/test con estensione .txt.

Suggerimenti
Consultare la documentazione del metodo fs.readdir(...).
Potrebbe essere anche utile consultare il modulo path, da includere nel programma.

Buon lavoro!

Una possibile soluzione
 var fs = require('fs'),  
     path = require('path');  
   
     fs.readdir(process.argv[2], function (err, listaFiles) {  
        listaFiles.forEach(function (file) {  
           if (path.extname(file) === '.' + process.argv[3])  
              console.log(file);  
        });  
     });  
   

La funzione di callback riceve come parametro un array di files.
Ogni array eredita il metodo forEach() da Array.prototype, che cicla l'array invocando un'altra funzione di callback che riceve come parametro l'elemento corrente dell'array.
Utillizando il modulo path, possiamo usare il metodo extname() che ritorna l'estenzione del nome file compreso il punto.

Ho aggiornato su github il progetto, effettuate un git pull per aggiornare i sorgenti che avete in locale, come mostrato in questo post

Alla prox.
Ivan

lunedì, dicembre 01, 2014

Esercitazioni su node.js: esercizio 3

Testo dell'esercizio
Scrivere un programma che utilizzi una singola operazione asincrona per leggere il contenuto di un file e stampare a video il numero di linee del file letto.
Il percorso completo del file verrà passato come primo argomento sulla linea di comando.

Suggerimenti
E' la versione asincrona dell'esercizio precedente. Dare un'occhiata a fs.readFile(...).
Riflettere su differenza programmazione sincrona vs asincrona.

Buon lavoro.

Una possibile soluzione

 var fs = require('fs'),  
     file = process.argv[2],  
     numeroLinee;  
   
     fs.readFile(file, function (err, contenutoFile) {  
        if (!err) {  
            numeroLinee = contenutoFile.toString().split('\n').length;  
            console.log(numeroLinee);  
        } else {  
            console.log("Problemi in lettura " + file);  
        }  
 });  

La lettura del file è asincrona, la funzione readFile non è bloccante.
Anche in questo caso si puo' specificare la codifica del file da leggere ed omettere l'invocazione del toString()

 var fs = require('fs'),  
    file = process.argv[2],  
    numeroLinee;  
   
    fs.readFile(file,'utf-8',function (err, contenutoFile) {  
        if (!err) {  
            numeroLinee = contenutoFile.split('\n').length;  
            console.log(numeroLinee);  
         } else {  
            console.log("Problemi in lettura " + file);  
         }  
 });  

Ho aggiornato su github il progetto, effettuate un git pull per aggiornare i sorgenti che avete in locale, come mostrato in questo post

Alla prox.
Ivan