[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Redirect gets to get input from a file insted of from the us

Kga Agk

6/6/2009 11:57:00 AM

I have this small program, or something like it as this just bigger:

test.rb

def testing

t = gets
puts t

k = gets
puts k

end


test2.rb

testing



When I run test2.rb it asks for user input. But I want the program to
get this input from a file instead of asking the user. And I do not want
to change the code in test.rb. I can only change the code in test2.rb or
make new files, but I cant change test.rb


I only now how to do this by running the program from the console

ruby test2.rb < input.txt


But that is not what I want. I want to do this inside the program. I do
not want the user to start it in the console like that. I want the user
only to start the program an th program get the input from the file (or
a text string in the program code) it self.


I am new to ruby, and new to this kind of programming, so please don't
kill me if it is a stupid question.
--
Posted via http://www.ruby-....

5 Answers

Rick DeNatale

6/6/2009 12:13:00 PM

0

On Sat, Jun 6, 2009 at 7:57 AM, Kga Agk<lord_kga@yahoo.no> wrote:
>
> t = gets
> puts t
>
> k = gets
> puts k
>
> end
>
>
> test2.rb
>
> testing
>

This works:

def testing
t = gets
puts t

k = gets
puts k

end


require 'stringio'

$stdin = StringIO.new("abc\ndef\n")

testing

Of course you'd want to set $stdin to the open file.


--
Rick DeNatale

Blog: http://talklikeaduck.denh...
Twitter: http://twitter.com/Ri...
WWR: http://www.workingwithrails.com/person/9021-ric...
LinkedIn: http://www.linkedin.com/in/ri...

Brian Candler

6/6/2009 5:00:00 PM

0

Rick Denatale wrote:
> On Sat, Jun 6, 2009 at 7:57 AM, Kga Agk<lord_kga@yahoo.no> wrote:
>> test2.rb
>>
>> testing
>>
>
> This works:
>
> def testing
> t = gets
> puts t
>
> k = gets
> puts k
>
> end
>
>
> require 'stringio'
>
> $stdin = StringIO.new("abc\ndef\n")
>
> testing
>
> Of course you'd want to set $stdin to the open file.

A bit of care is needed, because if the program is given command-line
arguments, Kernel#gets will read from the files listed on the
command-line (in the same way as ARGF.gets, I believe)

If test.rb really wants to read from stdin, it should do

$stdin.gets

Of course, you already said you couldn't modify test.rb. So perhaps you
need to do ARGV.clear or something like that.
--
Posted via http://www.ruby-....

Kga Agk

6/9/2009 9:32:00 AM

0


I have testet it om some programms, and it gets most outputs. But thee
is some output to the console i havent managed to catch. Might it be a
non standard output? How do i catch it? Is thee som way to catch
everything that are written to det consol, and not only the standard
output ?
--
Posted via http://www.ruby-....

Kga Agk

6/9/2009 10:29:00 AM

0

Kga Agk wrote:
>
> I have testet it om some programms, and it gets most outputs. But thee
> is some output to the console i havent managed to catch. Might it be a
> non standard output? How do i catch it? Is thee som way to catch
> everything that are written to det consol, and not only the standard
> output ?


Ops, i asked for input earlier. But now i'm after output. I want to
collect all kind of outputs that the program send to the commandline. I
now how to catch most of it by using somthing simmilar to the
description above, only with $stdout insted. But it dont catch
everything. There is some outputs to the command line it dont catch. I
dont now what kind of output it is, but it is a error message and
printet in red in eclipse
--
Posted via http://www.ruby-....

Kga Agk

6/9/2009 11:56:00 AM

0

Kga Agk wrote:
> Kga Agk wrote:
>>
>> I have testet it om some programms, and it gets most outputs. But thee
>> is some output to the console i havent managed to catch. Might it be a
>> non standard output? How do i catch it? Is thee som way to catch
>> everything that are written to det consol, and not only the standard
>> output ?
>
>
> Ops, i asked for input earlier. But now i'm after output. I want to
> collect all kind of outputs that the program send to the commandline. I
> now how to catch most of it by using somthing simmilar to the
> description above, only with $stdout insted. But it dont catch
> everything. There is some outputs to the command line it dont catch. I
> dont now what kind of output it is, but it is a error message and
> printet in red in eclipse



Hehe, i'm a clutterhead. It was just an stderr output.
--
Posted via http://www.ruby-....