रूबी में कंसोल से इनपुट पढ़ें?


115

मैं रूबी में एक सरल ए + बी प्रोग्राम लिखना चाहता हूं, लेकिन मुझे पता नहीं है कि कंसोल के साथ कैसे काम किया जाए।


10
मैं रूबी के बारे में बात कर रहा हूं लेकिन आरओआर नहीं। कंसोल से इनपुट के बारे में कोई शब्द नहीं है।
सेर्गेई

जवाबों:


228

क्या आप बात कर रहे हैं gets?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

ऐसा कुछ?

अपडेट करें

Kernel.getsमें पाए गए परम को पढ़ने की कोशिश करता है ARGVऔर नहीं मिलने पर सांत्वना देने के लिए कहता है ARGVARGVखाली उपयोग न होने पर भी कंसोल से पढ़ने के लिए बाध्य करनाSTDIN.gets


59
मेरे पास इस समाधान के साथ एक संघर्ष है: इसमें Kernel.getsमिली फ़ाइलों को पढ़ने की कोशिश करें ARGVऔर यदि नहीं ARGVमिला तो केवल कंसोल के लिए कहता है । ARGVखाली उपयोग न होने पर भी कंसोल से पढ़ने के लिए बाध्य करना STDIN.gets
fguillen

3
a.to_iऔर b.to_iबेहतर हो सकता है
डोरियन

है getsअवरुद्ध? यदि नहीं, तो क्या कोई विकल्प है जो अवरुद्ध है?
noMAD

1
@fguillen यह एक महान जवाब है और टिप्पणियों में छिपा नहीं होना चाहिए। क्या आप शायद इसका जवाब दे सकते हैं, कृपया धन्यवाद!
डैन रोसेनस्टार्क

2
@ सुझाव के लिए धन्यवाद, मैंने उत्तर में ही अपडेट जोड़ा है।
fguillen

28

आप कमांड लाइन के माध्यम से पैरामीटर भी पास कर सकते हैं। कमांड लाइन तर्क ARGV सरणी में स्टोर हैं। इसलिए ARGV [0] पहली संख्या है और ARGV [1] दूसरा नंबर है

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

और आप इसे इस तरह कहते हैं

% ./plus.rb 5 6
==> 11

10

उपयोगकर्ताओं से इनपुट लेने के कई तरीके हैं। मुझे व्यक्तिगत रूप से विधि का उपयोग करना पसंद है। जब आप उपयोग करते हैं, तो यह वह स्ट्रिंग प्राप्त करता है जिसे आपने टाइप किया था, और जिसमें आपके इनपुट को समाप्त करने के लिए दबाया गया ENTER कुंजी भी शामिल है ।

name = gets
"mukesh\n"

आप इसे irb में देख सकते हैं ; इसे टाइप करें और आप \ n देखेंगे, जो कि "newline" वर्ण है, जो ENTER कुंजी उत्पन्न करता है: प्रकारname = gets आप देखेंगे जैसे कि "mukesh\n" आप chomp विधि का उपयोग करके pesky newline वर्ण से छुटकारा पा सकते हैं ।

चॉम्प विधि आपको वापस स्ट्रिंग प्रदान करती है, लेकिन बिना समाप्ति वाली न्यूलाइन के। सुंदर धूमधाम विधि जीवन रक्षक।

name = gets.chomp
"mukesh"

इनपुट पढ़ने के लिए आप टर्मिनल का उपयोग भी कर सकते हैं। ARGV ऑब्जेक्ट क्लास में एक निरंतर परिभाषित है । यह ऐरे वर्ग का एक उदाहरण है और सभी सरणी विधियों तक इसकी पहुंच है। चूंकि यह एक सरणी है, भले ही यह एक स्थिर है, इसके तत्वों को संशोधित किया जा सकता है और बिना किसी परेशानी के साफ किया जा सकता है। डिफ़ॉल्ट रूप से, रूबी कमांड लाइन बाइनरी लागू होने पर सभी रूबी प्रोग्राम (स्पेस से विभाजित) में पारित सभी कमांड लाइन तर्कों को कैप्चर करता है और उन्हें ARGV सरणी में स्ट्रिंग्स के रूप में संग्रहीत करता है ।

आपके रूबी कार्यक्रम के अंदर लिखे जाने पर, जाने पर ARGV एक कमांड लाइन कमांड लेगा जो इस तरह दिखता है:

test.rb hi my name is mukesh

और एक सरणी बनाएं जो इस तरह दिखती है:

["hi", "my", "name", "is", "mukesh"]

लेकिन, अगर मैं सीमित इनपुट पास करना चाहता हूं तो हम कुछ इस तरह का उपयोग कर सकते हैं।

test.rb 12 23

और अपने कार्यक्रम में इस तरह के इनपुट का उपयोग करें:

a = ARGV[0]
b = ARGV[1]

5

यदि आप टर्मिनल से तर्क रखना चाहते हैं, तो निम्न कोड आज़माएँ:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"

0

यदि आप इंटरैक्टिव कंसोल बनाना चाहते हैं:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

उपयोग (आप summatorवर्तमान निर्देशिका में फ़ाइल में स्निपेट के ऊपर डालते हैं ):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Ctrl + Dबाहर निकलने के लिए उपयोग करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.