Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Αναλυτής γραμμών καταγραφής
Αναλυτής γραμμών καταγραφής

Αναλυτής γραμμών καταγραφής

Άσκηση εκμάθησης

Εισαγωγή

Όπως τα πάντα στη Ruby, ένα String είναι αντικείμενο. Οι συμβολοσειρές αποτελούνται από μια αυθαίρετη ακολουθία byte (συνήθως χαρακτήρες) και αρχικοποιούνται και χειρίζονται όπως κάθε άλλο αντικείμενο. Στην πραγματικότητα, ένα από τα πιο χρήσιμα πράγματα στη Ruby είναι οι πολλές μέθοδοι που μπορούν να κληθούν σε συμβολοσειρές (και άλλα αντικείμενα) για να σου γλιτώσουν πολύ χρόνο γράφοντας κώδικα. Σε αυτήν την άσκηση θα εξερευνήσουμε και θα παίξουμε με μερικές από αυτές τις βοηθητικές μεθόδους.

Δημιουργία συμβολοσειράς

Αν και μπορείς να χρησιμοποιήσεις το String.new(...) για να δημιουργήσεις μια συμβολοσειρά, είναι πολύ πιο συνηθισμένο να χρησιμοποιείς ένα literal. Υπάρχουν πολλά διαφορετικά literal που μπορείς να χρησιμοποιήσεις, και χωρίζονται σε δύο κατηγορίες: αυτά που επιτρέπουν παρεμβολή και αυτά που δεν επιτρέπουν.

Τα πιο συνηθισμένα literal είναι τα απλά και τα διπλά εισαγωγικά ('...' και "..."). Τα απλά εισαγωγικά δεν επιτρέπουν παρεμβολή, ενώ τα διπλά επιτρέπουν. Παρεμβολή είναι όταν μια συμβολοσειρά περιλαμβάνεται μέσα σε μια άλλη χρησιμοποιώντας τη σύνταξη #{}.

# Use single quotes when not interpolated
location = 'World'

# And double quotes when interpolated
puts "Hello, #{location}!"   #=> "Hello, World!"

Μπορείς επίσης να χρησιμοποιήσεις άλλα literal όπως το %{... } για συμβολοσειρές με παρεμβολή και το %q{...} για συμβολοσειρές χωρίς παρεμβολή. Αυτά είναι χρήσιμα αν οι συμβολοσειρές σου περιέχουν τους χαρακτήρες ' ή ".

Σημείωση: Δεν υπάρχει απόλυτος κανόνας που να λέει ότι πρέπει να χρησιμοποιείς συμβολοσειρές χωρίς παρεμβολή αν η συμβολοσειρά σου δεν περιέχει παρεμβολή.

Αλληλεπίδραση με συμβολοσειρές

Είναι χρήσιμο να σκέφτεσαι τις συμβολοσειρές στη Ruby παρόμοια με το πώς σκέφτεσαι τους πίνακες. Έχουν ένα μέγεθος και οι χαρακτήρες τους έχουν θέσεις (με το 0 ως πρώτη θέση):

my_string = "Some string"

my_string.size   #=> 11

my_string[0]    #=> 'S'
my_string[1]    #=> 'o'
my_string[-1]   #=> 'g'

# Find the first index of a character
my_string.index('m')   #=> 2

Μπορείς να εξάγεις μέρη των συμβολοσειρών χρησιμοποιώντας θέσεις ή τη μέθοδο slice:

my_string = "Some string"

# Find three characters starting with the second character (index 1)
my_string[1, 3]         #=> "ome"
my_string.slice(1, 3)   #=> "ome"

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

"hello".capitalize   #=> "Hello"
"HELLO".downcase     #=> "hello"
"hello".center(9)    #=> "  hello  "
"  hello  ".strip    #=> "hello"

"hello world".split(" ")   #=> ["hello", "world"]

Μπορείς επίσης να χρησιμοποιήσεις μεθόδους όπως η gsub για να αντικαταστήσεις χαρακτήρες:

# Replace one character with another
"noob".gsub("o","0")   #=> "n00b"

# (Advanced) Replace a regular expression
"Ruby really rocks".gsub(/[aieou]/,'')   #=> "Rby rlly rcks"

Σε όλα τα παραπάνω παραδείγματα, επιστρέφεται ένα νέο String. Ωστόσο, πολλές μέθοδοι έχουν ισοδύναμα που τελειώνουν σε ! και στην πραγματικότητα τροποποιούν την ίδια τη συμβολοσειρά.

# Use normal methods to return new strings
my_string = "hello"
my_string.capitalize   #=> "Hello"
puts my_string         #=> "hello"

# And bang-methods (...!) to modify the object
my_string = "hello"
my_string.capitalize!  #=> "Hello"
puts my_string         #=> "Hello"

Οδηγίες

Σε αυτή την άσκηση θα επεξεργάζεσαι γραμμές καταγραφής.

Κάθε γραμμή καταγραφής είναι μια συμβολοσειρά με την εξής μορφή: "[<LEVEL>]: <MESSAGE>".

Υπάρχουν τρία διαφορετικά επίπεδα καταγραφής:

  • INFO
  • WARNING
  • ERROR

Έχεις τρεις εργασίες, καθεμία από τις οποίες παίρνει μια γραμμή καταγραφής και σου ζητά να κάνεις κάτι με αυτήν. Υπάρχουν πολλοί τρόποι να λύσεις αυτές τις εργασίες. Διάλεξε τις αγαπημένες σου μεθόδους από τα παραπάνω παραδείγματα και δες τι μπορείς να φτιάξεις.

1. Πάρε το μήνυμα από μια γραμμή καταγραφής

Υλοποίησε τη μέθοδο LogLineParser#message ώστε να επιστρέφει το μήνυμα μιας γραμμής καταγραφής:

LogLineParser.new('[ERROR]: Invalid operation').message
# => "Invalid operation"

Τυχόν κενά στην αρχή ή στο τέλος πρέπει να αφαιρούνται:

LogLineParser.new("[WARNING]:  Disk almost full\r\n").message
# => "Disk almost full"

2. Πάρε το επίπεδο καταγραφής από μια γραμμή καταγραφής

Υλοποίησε τη μέθοδο LogLineParser#log_level ώστε να επιστρέφει το επίπεδο καταγραφής μιας γραμμής καταγραφής, το οποίο πρέπει να επιστρέφεται με πεζά γράμματα:

LogLineParser.new('[ERROR]: Invalid operation').log_level
# => "error"

3. Αναδιαμόρφωσε μια γραμμή καταγραφής

Υλοποίησε τη μέθοδο LogLineParser#reformat που αναδιαμορφώνει τη γραμμή καταγραφής, βάζοντας πρώτα το μήνυμα και μετά το επίπεδο καταγραφής σε παρενθέσεις:

LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Αναλυτής γραμμών καταγραφής;

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