2010-03-02 5 views
8

ile değişken bağımsız değişkenler nasıl kullanılır Çok iyi ruby ​​bilmiyorum, ama bir ortak çalışanın yazdığı bu betiğe bazı işlevler eklemeye çalışıyorum.Ruby'nin OptionParser

Temel olarak şu anda birkaç bayrak ve standart girdi olarak giriyor ve bayrakları ayrıştırmak için OptionParser kullanıyor.

OptionParser'ı, kedilere benzer bir komut satırı argümanlarını ayrıştırmak için kullanmak istiyorum. Yani sanırım benim sorum ben OptionParser mantıklı

cat [OPTION]... [FILE]... 

Umut kullanarak Ruby kedinin parçasını ayrıştırma komut satırı seçeneklerini yazma şekli şöyledir, herhangi bir yardım takdir edilmektedir.

+0

Anahtarlama dışı ([FILE]) bağımsız değişkenlerle nasıl başa çıkılacağını mı soruyorsunuz? –

+0

Evet, tüm anahtar seçenekleri için kod yazabildim, ancak daha sonra listelenen sonsuz sayıda dosyayla nasıl baş edeceğimi bilmiyorum. Üzgünüm belirsizdim. – icco

+0

Üzgünüm, cevabımı güncelledim. Tüm seçenekleri ayrıştırdıktan sonra, bir dizi dosya adı olarak ARGV ile kalmalısınız. Kullanıcının geçerli bir komut satırı girdiğinin varsayılması, yani. – Shadowfirebird

cevap

8
OPTS = {} 

op = OptionParser.new do |x| 
    x.banner = 'cat <options> <file>'  
    x.separator '' 

    x.on("-A", "--show-all", "Equivalent to -vET")    
     { OPTS[:showall] = true }  

    x.on("-b", "--number-nonblank", "number nonempty output lines") 
     { OPTS[:number_nonblank] = true }  

    x.on("-x", "--start-from NUM", Integer, "Start numbering from NUM")   
     { |n| OPTS[:start_num] = n } 

    x.on("-h", "--help", "Show this message") 
     { puts op; exit } 

end 

op.parse!(ARGV) 

# Example code for dealing with filenames 
ARGV.each{ |fn| output_file(OPTS, fn) } 

Diğer komut satırı işlemlerini, dedikleri gibi, okuyucu için bir egzersiz olarak bırakacağım! Kaptın bu işi.

(NB:. Ben bir bayrak sonra değeri geçirmeden demo hayali -x parametresi icat etmek zorunda)

Güncelleme: Ben bu varsayarak dosya adlarını bir dizi olarak argv ayrılacağını açıkladı gerekirdi kullanıcı herhangi bir girdi.

+0

Yani bununla ilgili sorun sadece bir dosyayı destekliyor. Gerçekten anlamaya çalıştığım şey, komut satırında 4 dosya olduğu gerçeğinin nasıl ele alınacağıdır. "Cat a.txt b.txt c.txt d.txt" gibi bir çağrı söyleyelim. – icco

+1

Nope, ARGV, seçenekler işlendikten sonra komut satırında kalan her kelime için bir öğeye sahip bir dizi olmalıdır. Örneğinizde dört element var. – Shadowfirebird

+2

@icco ', ARGV.inspect # => [" a.txt "," b.txt "," c.txt "," d.txt "]' i seçer –