2016-11-07 63 views
0

我试图从一个文件读取,因为我的更复杂的代码不起作用,我回到基础知识,看看它是否正确读取。 我的代码:Ruby - STDIN.read

MyParser.new(STDIN.read).run.lines.each do |line| 
    p line.chomp 
    end 

我用

ruby program 

(它被放置在一个bin目录,我救它不.rb

现在程序正在等待我写的东西。我输入:

../examples/file.txt 

并使用CTRL + Z(我在Windows 10上)。它产生^Z,我按回车。 现在我有一个错误:

Invalid argument @ rb_sysopen - ../examples/file.txt (Errno::EINVAL) 

MyParser类和它的整个逻辑工作正常。我会很感激任何提示。

+0

可能重复的[红宝石:\'读':无效的参数 - (Errno :: EINVAL)在File.read](http://stackoverflow.com/questions/10152273/ruby-read-invalid-argument-errnoeinval-at-file-read) – ndn

+0

我已经看到这一个,并使用line.chomp,同样的错误。 – Jes

+0

你试过'MyParser.new(STDIN.read.strip).whatever'吗? – ndn

回答

0

不知道,你的MyParser期望什么,很难知道你需要什么。

但是,也许这会有所帮助:

puts "Please enter the filename" 
STDOUT.flush 
MyParser.new(STDIN.gets.strip).run.lines.each do |line| 
    p line.chomp 
end 

随着STDOUT.flush用户得到的消息,前STDIN.gets等待消息:

MyParser.new(STDIN.gets.strip).run.lines.each do |line| 
    p line.chomp 
end 

我会通过一个消息你需要扩展它。


在你的情况我将采取ARGV一个外观和调用程序:

ruby program ../examples/file.txt 

你的程序应该再使用:

MyParser.new(ARGV.first).run.lines.each do |line| 
    p line.chomp 
end