2016-11-07 1 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, и я попал в enter. Теперь у меня есть ошибка:

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

MyParser класс и вся его логика работает отлично. Я буду благодарен за любые намеки.

+0

Возможный дубликат [рубин: \ ' read ': Недопустимый аргумент - (Errno :: EINVAL) в File.read] (http://stackoverflow.com/questions/10152273/ruby-read-invalid-argument-errnoeinval-at-fileread) – ndn

+0

У меня есть видел этот и использовал line.chomp, ту же ошибку. – Jes

+0

Пробовал ли вы 'MyParser.new (STDIN.read.strip) .whatever'? – ndn

ответ

0

Не зная, что ожидает ваш MyParser, это трудно понять, что вам нужно.

Но, может быть, это поможет:

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

Я бы продлить его сообщением, что вам нужно:

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 ждет сообщения.


В вашем случае я бы взглянуть на ARGV и вызовите программу:

ruby program ../examples/file.txt 

Ваша программа должна затем использовать:

MyParser.new(ARGV.first).run.lines.each do |line| 
    p line.chomp 
end 
Смежные вопросы