Hai trovato lavoro in una biblioteca locale, dove aiuti a organizzare la collezione di libri antichi. Gli studenti che la frequentano sono spesso a caccia di citazioni ricordate a metà, da inserire nelle loro tesine. Invece di leggere a mano ogni libro da cima a fondo, decidi di costruire un piccolo strumento che li analizzi, cercando proprio queste citazioni parziali.
Cerca nei file le righe che corrispondono a una stringa di ricerca e restituisci tutte le righe corrispondenti.
Il comando Unix grep cerca nei file le righe che corrispondono a un'espressione regolare. Il tuo compito è implementare una versione semplificata del comando grep, che supporta la ricerca di stringhe fisse.
Il comando grep accetta tre argomenti:
Poi legge il contenuto dei file specificati (nell'ordine indicato), trova le righe che contengono la stringa di ricerca e infine restituisce quelle righe nell'ordine in cui sono state trovate. Quando cerca in più file, ogni riga corrispondente è preceduta dal nome del file e dai due punti (':').
Il comando grep supporta i seguenti flag:
-n Anteponi il numero di riga e i due punti (':') a ogni riga dell'output, mettendo il numero dopo il nome del file (se presente).-l Restituisci solo i nomi dei file che contengono almeno una riga corrispondente.-i Confronta ignorando la differenza tra maiuscole e minuscole.-v Inverti il programma: raccogli tutte le righe che non corrispondono.-x Cerca solo le righe in cui la stringa di ricerca corrisponde all'intera riga.A differenza degli altri esercizi, grep.js non viene importato all'interno del file di test grep.spec.js. Verrà invece usato come se fosse un eseguibile. Per rendere possibile tutto questo, il file grep.js è stato impostato con uno shebang ed un commento che spiega a cosa serve:
#!/usr/bin/env node
// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)
I test avvieranno un nuovo processo Node che eseguirà grep.js.
Per recuperare gli argomenti con cui è stato avviato il processo, usa process.argv.
La funzione readLines è già disponibile. Non serve trasformare il percorso del file per usarla. La funzione readlines risolve il percorso a partire dalla directory di lavoro corrente che, per i processi di grep.js, è impostata sulla directory dell'esercizio.
Per scrivere l'output usa
console.log per scrivere sul flusso di output standard,console.error per scrivere sul flusso di errore standard.I test considerano l'esecuzione riuscita (resolved) se non viene scritto nulla sul flusso di errore standard, e non riuscita (rejected) se qualcosa viene scritto sul flusso di errore standard.
Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.