Έπιασες δουλειά σε μια τοπική βιβλιοθήκη, βοηθώντας στην οργάνωση της συλλογής παλιών βιβλίων της. Οι φοιτητές που την επισκέπτονται συχνά ψάχνουν μισοθυμημένα αποσπάσματα για να τα παραθέσουν στις εργασίες τους. Αντί να διαβάσεις χειροκίνητα κάθε βιβλίο από την αρχή ως το τέλος, αποφασίζεις να φτιάξεις ένα μικρό εργαλείο για να τα σαρώνει, ψάχνοντας για αυτά τα ημιτελή αποσπάσματα.
Ψάξε σε αρχεία για γραμμές που ταιριάζουν με μια συμβολοσειρά αναζήτησης και επέστρεψε όλες τις γραμμές που ταιριάζουν.
Η εντολή grep του Unix ψάχνει σε αρχεία για γραμμές που ταιριάζουν με μια κανονική έκφραση.
Η αποστολή σου είναι να υλοποιήσεις μια απλοποιημένη εντολή grep, η οποία υποστηρίζει αναζήτηση για σταθερές συμβολοσειρές.
Η εντολή grep δέχεται τρία ορίσματα:
Στη συνέχεια, διαβάζει τα περιεχόμενα των αρχείων που δίνονται (με τη σειρά που δίνονται), βρίσκει τις γραμμές που περιέχουν τη συμβολοσειρά αναζήτησης και, τέλος, επιστρέφει αυτές τις γραμμές με τη σειρά με την οποία βρέθηκαν. Όταν η αναζήτηση γίνεται σε πολλά αρχεία, μπροστά από κάθε γραμμή που ταιριάζει μπαίνει το όνομα του αρχείου και μία άνω και κάτω τελεία (':').
Η εντολή grep υποστηρίζει τις εξής σημαίες:
-n Βάζει τον αριθμό της γραμμής και μία άνω και κάτω τελεία (':') μπροστά από κάθε γραμμή της εξόδου, τοποθετώντας τον αριθμό μετά το όνομα του αρχείου (αν υπάρχει).-l Εμφανίζει μόνο τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία γραμμή που ταιριάζει.-i Κάνει αντιστοίχιση αγνοώντας πεζά και κεφαλαία.-v Αντιστρέφει τη λειτουργία του προγράμματος: συλλέγει όλες τις γραμμές που δεν ταιριάζουν.-x Αναζητά μόνο γραμμές στις οποίες η συμβολοσειρά αναζήτησης ταιριάζει με ολόκληρη τη γραμμή.Υλοποίησε:
grep ( pattern flags files -- lines )pattern είναι η συμβολοσειρά αναζήτησης, το flags είναι ένας πίνακας από μηδέν ή περισσότερες από τις συμβολοσειρές σημαιών "-n", "-l", "-i", "-v", και "-x", και το files είναι ένας πίνακας από ένα ή περισσότερα ονόματα αρχείων. Επίστρεψε τις γραμμές που ταιριάζουν (μαζί με όποια προθέματα ονόματος αρχείου και αριθμού γραμμής έχουν ζητηθεί) ως πίνακα συμβολοσειρών.
Όταν δίνεται η σημαία -l, επίστρεψε έναν πίνακα με τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία αντιστοίχιση.
Διάβασε τις γραμμές ενός αρχείου με το file-lines, περνώντας μια κωδικοποίηση:
USING: io.encodings.utf8 io.files ;
"iliad.txt" utf8 file-lines
! => { "Achilles sing, O Goddess! Peleus' son;" ... }
Τα τρία αρχεία fixture (iliad.txt, midsummer-night.txt, και paradise-lost.txt) συνοδεύουν την άσκηση στον κατάλογο εργασίας, οπότε μπορείς απλώς να τα διαβάσεις με το όνομά τους.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Factor με 47 έννοιες163 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.