Έπιασες δουλειά σε μια τοπική βιβλιοθήκη, βοηθώντας στην οργάνωση της συλλογής παλιών βιβλίων της. Οι φοιτητές που την επισκέπτονται συχνά ψάχνουν μισοθυμημένα αποσπάσματα για να τα παραθέσουν στις εργασίες τους. Αντί να διαβάσεις χειροκίνητα κάθε βιβλίο από την αρχή ως το τέλος, αποφασίζεις να φτιάξεις ένα μικρό εργαλείο για να τα σαρώνει, ψάχνοντας για αυτά τα ημιτελή αποσπάσματα.
Ψάξε σε αρχεία για γραμμές που ταιριάζουν με μια συμβολοσειρά αναζήτησης και επέστρεψε όλες τις γραμμές που ταιριάζουν.
Η εντολή grep του Unix ψάχνει σε αρχεία για γραμμές που ταιριάζουν με μια κανονική έκφραση.
Η αποστολή σου είναι να υλοποιήσεις μια απλοποιημένη εντολή grep, η οποία υποστηρίζει αναζήτηση για σταθερές συμβολοσειρές.
Η εντολή grep δέχεται τρία ορίσματα:
Στη συνέχεια, διαβάζει τα περιεχόμενα των αρχείων που δίνονται (με τη σειρά που δίνονται), βρίσκει τις γραμμές που περιέχουν τη συμβολοσειρά αναζήτησης και, τέλος, επιστρέφει αυτές τις γραμμές με τη σειρά με την οποία βρέθηκαν. Όταν η αναζήτηση γίνεται σε πολλά αρχεία, μπροστά από κάθε γραμμή που ταιριάζει μπαίνει το όνομα του αρχείου και μία άνω και κάτω τελεία (':').
Η εντολή grep υποστηρίζει τις εξής σημαίες:
-n Βάζει τον αριθμό της γραμμής και μία άνω και κάτω τελεία (':') μπροστά από κάθε γραμμή της εξόδου, τοποθετώντας τον αριθμό μετά το όνομα του αρχείου (αν υπάρχει).-l Εμφανίζει μόνο τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία γραμμή που ταιριάζει.-i Κάνει αντιστοίχιση αγνοώντας πεζά και κεφαλαία.-v Αντιστρέφει τη λειτουργία του προγράμματος: συλλέγει όλες τις γραμμές που δεν ταιριάζουν.-x Αναζητά μόνο γραμμές στις οποίες η συμβολοσειρά αναζήτησης ταιριάζει με ολόκληρη τη γραμμή.Αυτή η άσκηση παρουσιάζει το crate anyhow, το οποίο κάνει εύκολο τον χειρισμό αυθαίρετων τύπων σφαλμάτων.
Ο σκοπός του είναι να διασφαλίσει ότι όταν γράφεις μια εφαρμογή, δεν χρειάζεται να ανησυχείς για το ποια
συγκεκριμένα σφάλματα επιστρέφει η συνάρτηση που καλείς, αλλά να κάνεις απλώς το σωστό όταν τα προωθείς.
Σημείωση: είναι στην πραγματικότητα κάπως κακή πρακτική να χρησιμοποιείς το anyhow όταν γράφεις μια βιβλιοθήκη, όπως κάνουμε εδώ· είναι πιο
ρητό και πιο χρήσιμο να γράψεις το δικό σου Error enum όταν γράφεις μια βιβλιοθήκη (ενδεχομένως με τη βοήθεια βοηθητικών
macros σαν αυτά που παρέχει το thiserror crate). Ωστόσο, το κάνουμε
σκόπιμα και ρητά εδώ για να δείξουμε τη χρήση αυτού του crate.
Για να μάθεις περισσότερα για αυτό το crate, δες την τεκμηρίωσή του.
Ενώ αυτή η άσκηση σου ζητά να υλοποιήσεις μόνο τις πιο βασικές συναρτήσεις του grep,
υπάρχει στην πραγματικότητα ένα project για την πλήρη επανυλοποίηση του grep σε Rust, το ripgrep.
Αν σου άρεσε η ιδέα να ξαναγράψεις τα βασικά βοηθητικά προγράμματα σε Rust, ρίξε μια ματιά στα παρακάτω projects:
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Rust με 99 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.