2011-12-22 4 views
2

Я хотел бы сделать что-то вроде этого в терминалеЗапуск файла Ruby с входным файлом в терминале?

$ ruby quicksort.rb unsorted.txt 

quicksort.rb является рубин файл Я хотел бы запустить unsorted.txt является входным файлом, который содержит несортированные номера. Можно ли сделать что-то подобное в рубине?

спасибо.

ответ

3

Вы можете прочитать аргументы командной строки и выполнить операцию с файлом. для чтения аргументов вы можете использовать

ARGV.each do|a| 
    puts "Argument: #{a}" 
end 

Таким образом вы можете получить имя файла и получить его.

3

ARGF делает этот вид задачи легко, почти так же легко, как <> оператор в Perl:

$ cat quicksort.rb 
#!/usr/bin/ruby 

ARGF.each do |line| 
    puts line 
end 
$ ruby quicksort.rb /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
... 

вы хотели бы закладки эту extremely helpful quick guide to Ruby IO.

2

Для аргументов, используйте ARGV

ARGV.each do|file| 
file 
end 

Тогда вы можете прочитать содержимое файла:

f = File.open(file, File::RDONLY) 
1

Хотя я, как решить вещи в Ruby, я просто хочу отметить:

> sort unsorted.txt > sorted.txt 

если у вас есть достойная (* nix) командная строка. Но, может быть, вы хотите сделать больше, чем просто сортировку?

1

Просто читать стандарт, оболочка может сделать это для вас легко:

#!/usr/bin/env ruby 
puts $stdin.read.reverse 

Затем с помощью «<» переслать содержимое файла, содержащего bar.txt «Foobar» в вашей программе.

$ ruby foo.rb < bar.txt 
raboof 

Другое решение, что больше соответствует тому, что вы хотите сделать бы:

#!/usr/bin/env ruby 
puts IO.read(ARGV[0]).reverse 

запустить его:

$ ruby foo.rb bar.txt 

raboof 
Смежные вопросы