Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Newbie needs help getting user input

Reply
Thread Tools

Newbie needs help getting user input

 
 
Peter Vanderhaden
Guest
Posts: n/a
 
      09-30-2007
I'm trying to learn Ruby and trying to convert a Perl program at the
same time. I need to prompt a user to enter a number to select a
processing option. In Perl, I did it this way:

#
print STDERR "Enter option: ";
chomp ($option = <STDIN>);
#

I've searched the web and several books, but I haven't found anything
that works. It also seems that my system doesn't recognize "gets". Can
anyone help me out, and maybe post a simple input routine I can look at?
Thanks....
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Peter Vanderhaden
Guest
Posts: n/a
 
      09-30-2007
Wayne,
Thanks for the answer. The only problem is that I'm using Windows, not
Unix. I'm having problems with gems in Windows.
PV

Wayne E. Seguin wrote:
> Peter,
> $ gem install highline
>
>
>> require "highline"
>> option = Highline.new.ask("Enter option: ")

>
> There are many more things you can do with this gem, check out HighLine:
> http://highline.rubyforge.org/
>
>
> I hope this helps,
>
> ~Wayne


--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
7stud --
Guest
Posts: n/a
 
      09-30-2007
Peter Vanderhaden wrote:
> I'm trying to learn Ruby and trying to convert a Perl program at the
> same time. I need to prompt a user to enter a number to select a
> processing option. In Perl, I did it this way:
>
> #
> print STDERR "Enter option: ";
> chomp ($option = <STDIN>);
> #
>


print "Enter option (1, 2, 3): "
input = gets.chomp

if input == '1'
puts "I'm executing option 1."
elsif input == '2'
puts "I'm executing option 2."
elsif input == '3'
puts "I'm executing option 3."
else
puts "Bad input."
end


Or:

print "Enter option (1, 2, 3): "
input = gets.chomp

case input
when '1'
puts "I'm executing option 1."
when '2'
puts "I'm executing option 2."
when '3'
puts "I'm executing option 3."
else
puts "Bad input."
end

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
John Joyce
Guest
Posts: n/a
 
      09-30-2007

On Sep 29, 2007, at 8:28 PM, Peter Vanderhaden wrote:

> I'm trying to learn Ruby and trying to convert a Perl program at the
> same time. I need to prompt a user to enter a number to select a
> processing option. In Perl, I did it this way:
>
> #
> print STDERR "Enter option: ";
> chomp ($option = <STDIN>);
> #
>
> I've searched the web and several books, but I haven't found anything
> that works. It also seems that my system doesn't recognize
> "gets". Can
> anyone help me out, and maybe post a simple input routine I can
> look at?
> Thanks....
> --
> Posted via http://www.ruby-forum.com/.
>

The usual basic thing is:

puts "Enter option:"
option = gets.chomp


If your system isn't recognizing gets, then you've got some other
problem that should be fixed before writing much code.

 
Reply With Quote
 
Sebastian Hungerecker
Guest
Posts: n/a
 
      09-30-2007
Peter Vanderhaden wrote:
> print STDERR "Enter option: ";


The ruby equivalent of this would be STDERR.print "Enter option: " but why
STDERR? That hardly looks like an error message to me.

> chomp ($option = <STDIN>);


That would be gets.chomp or STDIN.gets.chomp if you want to make sure that
you read from STDIN.

> I've searched the web and several books, but I haven't found anything
> that works. It also seems that my system doesn't recognize "gets".


Your system is not supposed to recognize gets. If your ruby does not recognize
gets, there is something seriously wrong with your ruby installation.


HTH,
Sebastian
--
Jabber:
ICQ: 205544826

 
Reply With Quote
 
Peter Vanderhaden
Guest
Posts: n/a
 
      09-30-2007
Sebastian,
My Ruby installation must be corrupt, as it doesn't recognize gets.
When I try your solution, I get the following error message:

D:/scripts/ruby/f0.rb:10:in `gets': Bad file descriptor (Errno::EBADF)
from D:/scripts/ruby/f0.rb:10

I'd assume the best way to correct this would be to reinstall Ruby?
Would you agree?

Thanks,
PETERV


Sebastian Hungerecker wrote:

> Peter Vanderhaden wrote:
>> print STDERR "Enter option: ";

>
> The ruby equivalent of this would be STDERR.print "Enter option: " but
> why
> STDERR? That hardly looks like an error message to me.
>
>> chomp ($option = <STDIN>);

>
> That would be gets.chomp or STDIN.gets.chomp if you want to make
> sure that
> you read from STDIN.
>
>> I've searched the web and several books, but I haven't found anything
>> that works. It also seems that my system doesn't recognize "gets".

>
> Your system is not supposed to recognize gets. If your ruby does not
> recognize
> gets, there is something seriously wrong with your ruby installation.
>
>
> HTH,
> Sebastian


--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Peter Vanderhaden
Guest
Posts: n/a
 
      09-30-2007
Sebastian,
FYI, the reason I'm sending the prompt to STDERR instead of STDOUT is
that I've used reopen to redirect STDOUT to a file. I did that because
I want to write data to a file. I'm new to this, so if there's a better
way to write to the file, I'm all ears
PETERV

Peter Vanderhaden wrote:
> Sebastian,
> My Ruby installation must be corrupt, as it doesn't recognize gets.
> When I try your solution, I get the following error message:
>
> D:/scripts/ruby/f0.rb:10:in `gets': Bad file descriptor (Errno::EBADF)
> from D:/scripts/ruby/f0.rb:10
>
> I'd assume the best way to correct this would be to reinstall Ruby?
> Would you agree?
>
> Thanks,
> PETERV
>
>
> Sebastian Hungerecker wrote:
>
>> Peter Vanderhaden wrote:
>>> print STDERR "Enter option: ";

>>
>> The ruby equivalent of this would be STDERR.print "Enter option: " but
>> why
>> STDERR? That hardly looks like an error message to me.
>>
>>> chomp ($option = <STDIN>);

>>
>> That would be gets.chomp or STDIN.gets.chomp if you want to make
>> sure that
>> you read from STDIN.
>>
>>> I've searched the web and several books, but I haven't found anything
>>> that works. It also seems that my system doesn't recognize "gets".

>>
>> Your system is not supposed to recognize gets. If your ruby does not
>> recognize
>> gets, there is something seriously wrong with your ruby installation.
>>
>>
>> HTH,
>> Sebastian


--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Sebastian Hungerecker
Guest
Posts: n/a
 
      09-30-2007
Peter Vanderhaden wrote:
> Sebastian,
> My Ruby installation must be corrupt, as it doesn't recognize gets.
> When I try your solution, I get the following error message:
>
> D:/scripts/ruby/f0.rb:10:in `gets': Bad file descriptor (Errno::EBADF)
> from D:/scripts/ruby/f0.rb:10


Well, he doesn't say that he doesn't recognize gets, he says that an error
occured while executing gets.
It should be noted that Kernel#gets will open ARGV[0] as a file and read that
instead of STDIN when ARGV is not empty, which is the most common cause of
errors with gets. So if that's the problem in your case, try using STDIN.gets
instead of Kernel#gets. If that doesn't help, show the code.


> I'd assume the best way to correct this would be to reinstall Ruby?
> Would you agree?


If your gets is really broken and you're not just using it wrong, then yes.


HTH,
Sebastian
--
Jabber:
ICQ: 205544826

 
Reply With Quote
 
Sebastian Hungerecker
Guest
Posts: n/a
 
      09-30-2007
Peter Vanderhaden wrote:
> Sebastian,
> FYI, the reason I'm sending the prompt to STDERR instead of STDOUT is
> that I've used reopen to redirect STDOUT to a file. I did that because
> I want to write data to a file. I'm new to this, so if there's a better
> way to write to the file, I'm all ears
> PETERV


File.open(filename,'w') do |f|
f.puts "Text that's supposed to go in the file"
puts "Text that's supposed to go to the screen"
f.puts "More text for the file"
STDERR.puts "Error message"
end


HTH,
Sebastian
--
Jabber:
ICQ: 205544826

 
Reply With Quote
 
7stud --
Guest
Posts: n/a
 
      09-30-2007
Peter Vanderhaden wrote:
> Sebastian,
> FYI, the reason I'm sending the prompt to STDERR instead of STDOUT is
> that I've used reopen to redirect STDOUT to a file. I did that because
> I want to write data to a file. I'm new to this, so if there's a better
> way to write to the file, I'm all ears
>


How about:

1)
f = File.new("data.txt", "w")
f.write("hello world\n")
f.close()


2)
f = File.open("data.txt", "w") do |file|
file.puts("goodbye mars")
end
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Newbie needs help getting started Cary Swoveland Ruby 11 01-19-2010 11:20 PM
newbie needs help with user input into strings rob C++ 7 10-20-2007 12:54 AM
Newbie needs help getting data from client to server aspiring geek ASP .Net 0 12-07-2006 03:57 PM
Getting User Input after getting Input from a file dei3cmix@uga.edu C++ 3 03-23-2006 05:01 AM
Newbie needs help getting ODBC on ISP setup Lee Falataco ASP General 3 05-04-2004 02:22 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57