ट्रैक
/
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"

ऊपर के सभी उदाहरणों में एक नई 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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।