المسارات
/
Ruby
Ruby
/
التمارين
/
محلّل سطور السجل
محلّل سطور السجل

محلّل سطور السجل

تمرين تعلّمي

مقدمة

مثل كل شيء في Ruby، فإن String كائن. تتكوّن السلاسل النصية من تسلسل عشوائي من البايتات (عادةً أحرف)، وتُهيَّأ وتُعالَج مثل أي كائن آخر. في الواقع، من أكثر ما يميّز Ruby هو كثرة الطرق التي يمكن استدعاؤها على السلاسل النصية (وعلى كائنات أخرى)، مما يوفّر عليك الكثير من الوقت في كتابة الكود. في هذا التمرين سنستكشف بعض هذه الطرق المساعدة وسنجرّبها.

إنشاء سلسلة نصية

رغم أنك تستطيع استخدام String.new(...) لإنشاء سلسلة نصية، فالأكثر شيوعًا هو استخدام قيمة حرفية. هناك الكثير من القيم الحرفية المختلفة التي يمكنك استخدامها، وهي تنقسم إلى فئتين: تلك التي تسمح بالإدراج وتلك التي لا تسمح به.

أكثر القيم الحرفية شيوعًا هي علامات التنصيص المفردة والمزدوجة ('...' و"..."). لا تسمح علامات التنصيص المفردة بالإدراج، بينما تسمح المزدوجة به. الإدراج هو أن تُضمَّن سلسلة نصية داخل أخرى باستخدام الصيغة #{}.

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

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

يمكنك أيضًا استخدام قيم حرفية أخرى مثل %{... } للسلاسل النصية بإدراج و%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"

في كل الأمثلة أعلاه، تُرجع سلسلة نصية جديدة. لكن للعديد من الطرق نظائر تنتهي بـ! وتعدّل السلسلة النصية نفسها فعليًا.

# 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.