Έπιασες δουλειά σε μια τοπική βιβλιοθήκη, βοηθώντας στην οργάνωση της συλλογής παλιών βιβλίων της. Οι φοιτητές που την επισκέπτονται συχνά ψάχνουν μισοθυμημένα αποσπάσματα για να τα παραθέσουν στις εργασίες τους. Αντί να διαβάσεις χειροκίνητα κάθε βιβλίο από την αρχή ως το τέλος, αποφασίζεις να φτιάξεις ένα μικρό εργαλείο για να τα σαρώνει, ψάχνοντας για αυτά τα ημιτελή αποσπάσματα.
Ψάξε σε αρχεία για γραμμές που ταιριάζουν με μια συμβολοσειρά αναζήτησης και επέστρεψε όλες τις γραμμές που ταιριάζουν.
Η εντολή grep του Unix ψάχνει σε αρχεία για γραμμές που ταιριάζουν με μια κανονική έκφραση.
Η αποστολή σου είναι να υλοποιήσεις μια απλοποιημένη εντολή grep, η οποία υποστηρίζει αναζήτηση για σταθερές συμβολοσειρές.
Η εντολή grep δέχεται τρία ορίσματα:
Στη συνέχεια, διαβάζει τα περιεχόμενα των αρχείων που δίνονται (με τη σειρά που δίνονται), βρίσκει τις γραμμές που περιέχουν τη συμβολοσειρά αναζήτησης και, τέλος, επιστρέφει αυτές τις γραμμές με τη σειρά με την οποία βρέθηκαν. Όταν η αναζήτηση γίνεται σε πολλά αρχεία, μπροστά από κάθε γραμμή που ταιριάζει μπαίνει το όνομα του αρχείου και μία άνω και κάτω τελεία (':').
Η εντολή grep υποστηρίζει τις εξής σημαίες:
-n Βάζει τον αριθμό της γραμμής και μία άνω και κάτω τελεία (':') μπροστά από κάθε γραμμή της εξόδου, τοποθετώντας τον αριθμό μετά το όνομα του αρχείου (αν υπάρχει).-l Εμφανίζει μόνο τα ονόματα των αρχείων που περιέχουν τουλάχιστον μία γραμμή που ταιριάζει.-i Κάνει αντιστοίχιση αγνοώντας πεζά και κεφαλαία.-v Αντιστρέφει τη λειτουργία του προγράμματος: συλλέγει όλες τις γραμμές που δεν ταιριάζουν.-x Αναζητά μόνο γραμμές στις οποίες η συμβολοσειρά αναζήτησης ταιριάζει με ολόκληρη τη γραμμή.Σε αντίθεση με άλλες ασκήσεις, το grep.js δεν εισάγεται μέσα στο αρχείο δοκιμών grep.spec.js. Αντίθετα, θα χρησιμοποιηθεί σαν να είναι εκτελέσιμο. Για να γίνει αυτό εφικτό, το αρχείο grep.js έχει στηθεί με ένα shebang και ένα σχόλιο που εξηγεί τι κάνει αυτό:
#!/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)
Οι δοκιμές θα ξεκινήσουν μια νέα διεργασία node, εκτελώντας το grep.js.
Για να ανακτήσεις τα ορίσματα με τα οποία ξεκίνησε η διεργασία, χρησιμοποίησε το process.argv.
Η συνάρτηση readLines έχει δοθεί έτοιμη. Δεν χρειάζεται να μετατρέψεις τη διαδρομή του αρχείου για να τη χρησιμοποιήσεις. Η συνάρτηση readlines θα επιλύσει τη διαδρομή από τον τρέχοντα κατάλογο εργασίας, ο οποίος, για τις διεργασίες του grep.js, είναι ο κατάλογος της άσκησης.
Για να γράψεις έξοδο, χρησιμοποίησε
console.log για εγγραφή στη ροή τυπικής εξόδου,console.error για εγγραφή στη ροή τυπικού σφάλματος.Οι δοκιμές θεωρούν την εκτέλεση επιτυχημένη (resolved) αν δεν γραφτεί τίποτα στη ροή τυπικού σφάλματος, και ανεπιτυχή (rejected) αν γραφτεί κάτι στη ροή τυπικού σφάλματος.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.