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.Implementa:
grep ( pattern flags files -- lines )pattern è la stringa da cercare, flags è un array di zero o più tra le
stringhe di flag "-n", "-l", "-i", "-v" e "-x", e files è un
array di uno o più nomi di file. Restituisci le righe corrispondenti (con gli
eventuali prefissi richiesti di nome del file e numero di riga) come array di
stringhe.
Quando è presente il flag -l, restituisci un array con i nomi dei file che
contengono almeno una corrispondenza.
Leggi le righe di un file con file-lines, passando una codifica:
USING: io.encodings.utf8 io.files ;
"iliad.txt" utf8 file-lines
! => { "Achilles sing, O Goddess! Peleus' son;" ... }
I tre file di prova (iliad.txt, midsummer-night.txt e
paradise-lost.txt) arrivano insieme all'esercizio nella directory di lavoro,
quindi basta leggerli per nome.
Iscriviti a Exercism per imparare e padroneggiare Factor con 47 concetti163 esercizi e il mentoring di persone reali, tutto gratis.