Tracks
/
Ruby
Ruby
/
Übungen
/
Logzeilen-Parser
Logzeilen-Parser

Logzeilen-Parser

Lernübung

Einführung

Wie alles in Ruby ist ein String ein Objekt. Strings bestehen aus einer beliebigen Folge von Bytes (normalerweise Zeichen) und werden wie jedes andere Objekt initialisiert und manipuliert. Tatsächlich ist eines der nützlichsten Dinge an Ruby die Vielzahl an Methoden, die auf Strings (und anderen Objekten) aufgerufen werden können und dir viel Zeit beim Schreiben von Code sparen. In dieser Übung erkunden wir einige dieser Hilfsmethoden und experimentieren damit.

Einen String erstellen

Obwohl du String.new(...) verwenden kannst, um einen String zu erstellen, ist es viel üblicher, ein Literal zu verwenden. Es gibt viele verschiedene Literale, die du verwenden kannst. Sie fallen in zwei Kategorien: solche, die Interpolation erlauben, und solche, die es nicht tun.

Die häufigsten Literale sind einfache und doppelte Anführungszeichen ('...' und "..."). Einfache Anführungszeichen erlauben keine Interpolation, doppelte hingegen schon. Bei der Interpolation wird ein String mit der #{}-Syntax in einen anderen eingefügt.

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

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

Du kannst auch andere Literale wie %{... } für interpolierte Strings und %q{...} für nicht interpolierte Strings verwenden. Diese sind nützlich, wenn deine Strings die Zeichen ' oder " enthalten.

Hinweis: Es gibt keine absolute Regel, die besagt, dass du nicht interpolierte Strings verwenden musst, wenn dein String keine Interpolation enthält.

Mit Strings interagieren

Es ist hilfreich, sich Strings in Ruby ähnlich wie Arrays vorzustellen. Sie haben eine Größe, und ihre Zeichen sind indiziert (wobei 0 der erste Index ist):

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

Teile von Strings können mit Indizes oder slice extrahiert werden:

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"

Auch die semantischen Werte von Strings lassen sich verändern. Es lohnt sich, die Ruby-Dokumentation zu erkunden, um alle Methoden kennenzulernen, aber hier sind ein paar häufig verwendete Beispiele:

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

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

Du kannst auch Methoden wie gsub verwenden, um Zeichen zu ersetzen:

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

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

In allen Beispielen oben wird ein neuer String zurückgegeben. Viele Methoden haben jedoch Entsprechungen, die auf ! enden und den String tatsächlich selbst verändern.

# 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"

Anleitung

In dieser Übung verarbeitest du Logzeilen.

Jede Logzeile ist ein String, der wie folgt formatiert ist: "[<LEVEL>]: <MESSAGE>".

Es gibt drei verschiedene Log-Level:

  • INFO
  • WARNING
  • ERROR

Du hast drei Aufgaben. Bei jeder Aufgabe bekommst du eine Logzeile und sollst etwas damit tun. Es gibt viele Wege, diese Aufgaben zu lösen. Wähle deine Lieblingsmethoden aus den Beispielen oben und schau, was du hinbekommst.

1. Nachricht aus einer Logzeile ermitteln

Implementiere die Methode LogLineParser#message, um die Nachricht einer Logzeile zurückzugeben:

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

Führende oder nachfolgende Leerzeichen sollen entfernt werden:

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

2. Log-Level aus einer Logzeile ermitteln

Implementiere die Methode LogLineParser#log_level, um das Log-Level einer Logzeile in Kleinbuchstaben zurückzugeben:

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

3. Eine Logzeile neu formatieren

Implementiere die Methode LogLineParser#reformat, die die Logzeile neu formatiert: zuerst die Nachricht, danach das Log-Level in runden Klammern:

LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Logzeilen-Parser zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.