Grep

Grep

Δύσκολο

Εισαγωγή

Έπιασες δουλειά σε μια τοπική βιβλιοθήκη, βοηθώντας στην οργάνωση της συλλογής παλιών βιβλίων της. Οι φοιτητές που την επισκέπτονται συχνά ψάχνουν μισοθυμημένα αποσπάσματα για να τα παραθέσουν στις εργασίες τους. Αντί να διαβάσεις χειροκίνητα κάθε βιβλίο από την αρχή ως το τέλος, αποφασίζεις να φτιάξεις ένα μικρό εργαλείο για να τα σαρώνει, ψάχνοντας για αυτά τα ημιτελή αποσπάσματα.

Οδηγίες

Ψάξε σε αρχεία για γραμμές που ταιριάζουν με μια συμβολοσειρά αναζήτησης και επέστρεψε όλες τις γραμμές που ταιριάζουν.

Η εντολή grep του Unix ψάχνει σε αρχεία για γραμμές που ταιριάζουν με μια κανονική έκφραση. Η αποστολή σου είναι να υλοποιήσεις μια απλοποιημένη εντολή grep, η οποία υποστηρίζει αναζήτηση για σταθερές συμβολοσειρές.

Η εντολή grep δέχεται τρία ορίσματα:

  1. Τη συμβολοσειρά που θα αναζητήσεις.
  2. Μηδέν ή περισσότερες σημαίες για την προσαρμογή της συμπεριφοράς της εντολής.
  3. Ένα ή περισσότερα αρχεία στα οποία θα γίνει η αναζήτηση.

Στη συνέχεια, διαβάζει τα περιεχόμενα των αρχείων που δίνονται (με τη σειρά που δίνονται), βρίσκει τις γραμμές που περιέχουν τη συμβολοσειρά αναζήτησης και, τέλος, επιστρέφει αυτές τις γραμμές με τη σειρά με την οποία βρέθηκαν. Όταν η αναζήτηση γίνεται σε πολλά αρχεία, μπροστά από κάθε γραμμή που ταιριάζει μπαίνει το όνομα του αρχείου και μία άνω και κάτω τελεία (':').

Σημαίες

Η εντολή grep υποστηρίζει τις εξής σημαίες:

  • -n Βάζει τον αριθμό της γραμμής και μία άνω και κάτω τελεία (':') μπροστά από κάθε γραμμή της εξόδου, τοποθετώντας τον αριθμό μετά το όνομα του αρχείου (αν υπάρχει).
  • -l Εμφανίζει μόνο τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία γραμμή που ταιριάζει.
  • -i Κάνει αντιστοίχιση αγνοώντας πεζά και κεφαλαία.
  • -v Αντιστρέφει τη λειτουργία του προγράμματος: συλλέγει όλες τις γραμμές που δεν ταιριάζουν.
  • -x Αναζητά μόνο γραμμές στις οποίες η συμβολοσειρά αναζήτησης ταιριάζει με ολόκληρη τη γραμμή.

Διαδικασία IO

Σε αντίθεση με άλλες ασκήσεις, το grep απαιτεί να αλληλεπιδράσεις με τον "εξωτερικό κόσμο": να διαβάζεις αρχεία, να χειρίζεσαι σφάλματα του συστήματος και να εκτυπώνεις στο stdout.

Στη Lean, η αλληλεπίδραση με το σύστημα γίνεται συνήθως στη μονάδα IO, η οποία επιτρέπει να συμβαίνουν παρενέργειες σε ένα ελεγχόμενο περιβάλλον χωρίς να επηρεάζεται η καθαρή κατάσταση των περισσότερων άλλων συναρτήσεων.

Ανάγνωση ορισμάτων

Η Lean επιτρέπει να καλέσεις ένα αρχείο ως script, είτε απευθείας ως αυτόνομο script μέσω lean --run είτε με τη χρήση του lake.

Ένα project σε Lean έχει ένα σημείο εισόδου, μια συνάρτηση που ονομάζεται main, η οποία παίρνει μια List String με όλα τα ορίσματα που της περνιούνται. Για να προσομοιωθεί η εκτέλεση του Grep.lean ως εκτελέσιμου, τα ορίσματα περνιούνται με τον ίδιο τρόπο σε αυτή την άσκηση.

Ανάγνωση αρχείων

Η Lean προσφέρει συναρτήσεις για τον χειρισμό αρχείων στη μονάδα IO.FS. Για παράδειγμα, η IO.FS.readFile μπορεί να χρησιμοποιηθεί για να διαβάσεις τα περιεχόμενα ενός αρχείου σε μια δεδομένη διαδρομή, ως String.

Εγγραφή εξόδου

Αντί να επιστρέφει μια τιμή, αυτή η άσκηση απαιτεί τα αποτελέσματα να γράφονται στην τυπική έξοδο ή στο τυπικό σφάλμα. Υπάρχουν συναρτήσεις στη Lean για αυτόν τον σκοπό.

Χειρισμός σφαλμάτων συστήματος

Σε αντίθεση με τα σφάλματα στο Except, οι εξαιρέσεις του IO είναι στην πραγματικότητα εξαιρέσεις χρόνου εκτέλεσης. Μπορείς να χρησιμοποιήσεις try/catch για να τις χειριστείς:

try
    /- 
        code that may possibly raise an exception 
    -/
catch msg =>
    /-
        code that is executed only if an exception was thrown
    -/
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Lean Exercism

Έτοιμος να ξεκινήσεις την άσκηση Grep;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Lean με 100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.