Запуск файла Ruby с входным файлом в терминале? - PullRequest
2 голосов
/ 22 декабря 2011

Я хотел бы сделать что-то подобное в терминале

$ ruby quicksort.rb unsorted.txt

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

Спасибо.

Ответы [ 5 ]

3 голосов
/ 22 декабря 2011

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

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

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

3 голосов
/ 22 декабря 2011

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
...

Возможно, вы захотите добавить в закладки этот чрезвычайно полезный быстрыйруководство по Ruby IO .

2 голосов
/ 22 декабря 2011

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

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

Затем используйте «<» для пересылки содержимого файла bar.txt, содержащего «foobar», в вашу программу. </p>

$ ruby foo.rb  < bar.txt 
raboof

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

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

, запустив его:

$ ruby foo.rb bar.txt 

raboof
2 голосов
/ 22 декабря 2011

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

ARGV.each do|file|
file
end

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

f = File.open(file, File::RDONLY)
1 голос
/ 22 декабря 2011

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

> sort unsorted.txt > sorted.txt

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

...