0

私は Ruby に比較的慣れていないため、複数の入力ファイルを処理するスクリプトを作成する必要があります。次のように呼び出す必要があります。

script.rb -i file*

file1.xmlディレクトリには、 などの複数のファイルが含まれていますfile2.xml。簡単な質問: このワイルドカードはどのように拡張されますか? スクリプトでそれをプログラムする必要がありますか? OptionParserコマンドライン引数を解析するために Class を使用しています。

ありがとう!

4

4 に答える 4

5

ワイルドカードはコマンドラインによって展開されるため、ディレクトリ内の各ファイルのリストが取得されます

C:\working>dir *.txt

05/10/2007 03:24 PM 46,101      config.txt
11/23/2004 11:54 AM 361           tips.txt
2 File(s) 46,462 bytes

もしあなたがそうするなら、

C:\working>ruby -e "puts ARGV" *.txt
config.txt
tips.txt

Ruby は文字列 *.txt を一致するファイル名に変換し、展開された配列を新しい引数として渡します。

optparse の使用:

options = {}
OptionParser.new do |opts|
    opts.on("-i", Array, "List files") do |v|
      options[:files] = v
    end
  end.parse!

p options

C:\working> script.rb -i *.txt

印刷されます:

["config.txt","tips.txt"]

options[:files] は文字列の配列になります

http://www.ruby-forum.com/topic/111252

于 2010-10-25T14:13:45.490 に答える
2

-iスクリプトがファイルを受け入れる場合は、スイッチを使用してファイルのリストを使用するという奇妙なアイデアは-i、他のオプションにスイッチを使用せずに使用する可能性がありますか?その場合は、を使用してARGVください。

于 2010-10-25T14:30:20.850 に答える
1

Unix の場合、Ruby 自体にワイルドカードを渡したい場合は、ワイルドカードをエスケープする必要があります (引用符で囲むなど)。コマンド ラインが関係するファイルの数を要求していたときに、このアプローチを使用しました (これはおそらく悪い兆候です!)。

于 2010-10-25T22:38:36.100 に答える
0
Dir["*.txt"].each do |file|
   o = open("tempfile","a")
   open(file).each do |line|
     # lines for processing
     # .....
       o.write(...)
   end
   o.close
   File.rename("tempfile",file)
end 
于 2010-10-25T14:41:13.740 に答える