• ベストアンサー

rubyのforeach構文について

rubyのforeach構文を用いて(foreachにこだわるわけではありませんが) 指定したディレクトリ内の全ファイルに対してプログラムを実行させるようなコードを書きたいのです 以下が書いてみたコードなのですが、これだと一度execを行ったあと動作が終了してしまいます なにか対応策はありますでしょうか よろしくお願いします Dir::foreach(ARGV[0]) {|f| exec("java execute " + ARGV[0]+ "\\#{f}") }

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

exec関数が成功した場合は、制御が戻りません。(execの次の行に進みません) したがって、一度動作を行うと終了します。 制御が戻るのを期待する場合は、execの代わりにsystemを使用します。 systemの呼び出し方はexecと同じです。

pwpr20
質問者

お礼

解決しました! 迅速な対応ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Rubyのスクリプト

    Rubyを使って、ディレクトリを順に処理していくスクリプトを作ろうとしています。 下記は、perlのものです。 chdir("C:/data"); opendir(DIR, "./"); @myfolderlist= grep(-d, readdir(DIR)); close(DIR); foreach $myfolder(@myfolderlist){ if(($myfolder ne ".") && ($myfolder ne ".." )){ print "$myfolder\n"; } } これに対応するような、かつRubyらしい(foreachを使う)スクリプトを作りたいと考えます。 Dir.foreach('C:/Data'){|item| item.chomp! print item,"\n" } 上記のRubyスクリプトの問題は、ディレクトリのみならず、そこに存在するファイルまで出してしまいます。 Rubyにおいて、ディレクトリ」のみを持ってくるには、どのようにすれば良いでしょうか? 宜しくお願いいたします。

  • rubyでC言語のexitにあたる構文は?

    現在、C言語のプログラムをrubyに書き換えています。 そこで、C言語のexitに当たるrubyの構文、もしくは、 文法が見つからず、困ってます。 (ある条件になったら、強制的にrubyの実行を  停止させたいのですが、、、) (__END__ですか?) 詳しい方が居ましたら、ご指南下さい。

  • Ruby のコードの実行の仕方がわかりません。

    Ruby のコードの実行の仕方がわかりません。 私は、Javaプログラマーなのですが、Javaコードに行番号をつけて 整形したHTMLコードを出力してくれるツールを探していたところ Rubyで書かれたツール rb2html.rb にたどり着きました。 そこで、   http://rubyinstaller.org/download.html のサイトから、Ruby 1.8.7-p249 (RC2) をダウンロードし、WindowsXP(SP3)の   C:\Program Files\Ruby にインストールし   C:\Program Files\Ruby\bin にパスを通しました。コマンドプロンプトにて   C:\> ruby --version の入力に対して   ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] と出力されますので、インストールまでは成功していると思います。 次に、 rb2htmlrb を   http://www.nslabs.jp/rb2html.rhtml から   rb2html-2.4.tar.gz をダウンロードし、解凍後、rb2html-2.4 を   C:\Program Files\Ruby に置きました。 そして、とりあえずテストとして、同梱のsamples/Hoge.java で動作を確認してみようと   C:\Program Files\Ruby\rb2html-2.4>rb2html.rb samples/Hoge.java   | と入力してみたところ、何も出力されず、上記のようにカーソルが 点滅した状態で止まってしまっています。 どこに、問題があるのか、ご教授いただければ幸いです。

  • Ruby Win環境 .(ドット)から始まるファイルのctime

    カレントディレクトリにある全てのファイル及びディレクトリの変更時刻を取得したいです。 Dir.foreach('.') do |file| puts File.ctime(file) end そこで、上記Rubyスクリプトを作成し実行しました。 しかし、カレントに.(ドット)から始まるファイルを置いて上記rubyスクリプトを実行すると、 `ctime': No such file or directory - .htaccess (Errno::ENOENT)のエラーになってしまいます。(.htaccessをカレントに置いた例) Win環境固有のものかと思いますが、なにか対策があるでしょうか?

  • Rubyのcgiが動作しません。

    下記のように4行のルビーのcgiを作りました。 ファイル名rb.cgi #!/usr/bin/ruby print <<EOF あああ EOF これをRubyを提供しているapacheサーバにアップロードし パーミッションを777にしました。 文字コードはEUC、改行はLFのみです。 しかし、Internal Server Errorが表示されます。 そこで、サーバにログオンし、このcgiファイルの ディレクトリまで移動し、./rb.cgiを実行すると あああと表示されます。また、このcgiファイルと 同一ディレクトリにあるparlのcgi(掲示板)は 正常動作しています。 どこが間違っているのでしょうか?

    • ベストアンサー
    • CGI
  • rubyの構文(&&を用いた条件分岐について)

    ruby初心者です。 最近、ruby on railsで書かれたソースを引き継ぎ解析を行っています。 その中で、以下のような構文が出てきました。 ========================================= num = 0 bool = false vals = '' puts 'start' num == 0 && bool && if vals  puts 'true' else  puts 'false' end puts 'end' ========================================= 上記プログラムを実行すると、if ~ end までが実行されませんでした。 そこで、変数boolをtrueに変更して再実行したところ、if文が実行されました。 そこで私は、上記プログラムは以下と同値であると解釈しました。 ====================================== (省略) if num == 0 && bool  if vals   puts 'true'  else   puts 'false'  end end ======================================= 以上を踏まえて・・・ 1.私の解釈は正しいでしょうか? 2.間違っている場合、正しい処理の解釈を教えていただけますでしょうか?または参考URLを教えていただけますと助かります。 文の最後に"&&"がついている文を見たことがなく、ネットで調べても 正解らしいものが掲載されていなかったので質問させていただきました。 拙い説明で申し訳ありませんが、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • foreachの入れ子について。

    あるディレクトリ内の全てのファイル名を取得し、 全てのファイルを開いてカンマ、ダブルクォーテーション付加の処理をし、 別ファイルへと出力する。と言ったものを以下のように作ったのですが、 入れ子のforeach{}内へ入って行きません、 foreachの入れ子は出来ないのでしょうか? それともプログラムが間違っているのでしょうか? どなたかご教授お願いいたします。 require "./jcode.pl"; # jcode.plの呼び出し #ディレクトリ表示 opendir(DIR01,"./TestData") || die "can not open dir"; @FileName = readdir(DIR01); closedir(DIR01) || die "can not close dir"; foreach $file (@FileName) { if ($file eq '.') {next;} # '.'の時ループを抜ける if ($file eq '..') {next;} # '..'の時ループを抜ける $FName = "./TestData/$file"; # ファイルのオープン open ( FILEHANDLE , "$FName") || die "ファイルを開けません :$!\n"; @line = <FILEIN>; close (FILEIN); foreach $line (@line){ ######################### print "TEST-->$line\n"; ######################### $line =~ s/ⅰ|ⅱ|ⅲ|ⅳ|ⅴ|ⅵ|ⅶ|ⅷ|ⅸ|ⅹ//g; $line =~ s/\"/\"\"/g; $line =~ s/\,\"\?/\"\,\"/g; $line =~ s/\"\,\?/\"\,\"/g; $line =~ s/\ |\ /\"\,\"/g; &jcode::sjis2euc(\$line,"z"); # sjis --> euc コードへ変換 if (length $line != 1){ chop($line); $cd_22 = chr(0x0022); $line = "$cd_22$line$cd_22"; $line =~ s/([^\LF])$/$1\n/; } } open (FILEOUT, ">./log/TEST.txt") or die; #上書き時 print FILEOUT @line; close (FILEOUT); } } exit;

    • ベストアンサー
    • Perl
  • rubyのmygameライブラリが動かない!!

    rubyのmygameライブラリがうまく動作しません。 mygame使っている方に教えていただけると幸いです。 実行環境 OS:windos vista rubyバージョン:Active script ruby1.8.5.2 rubyのmygameライブラリ(SDL同梱)をダウンロードしました。 インストーラがうまく動作しなかったので手動でやりました。 確認のコマンド(ruby -r mygame/boot -e "")では、うまく動作しました。 しかし、いざソースファイルを書いて実行してみると次のようなエラーメッセージが 出てきて実行できません。 hello.rb:1: Invalid char `\377' in expression hello.rb:1 Invalid char `\376' in expression ちなみに、ソースコードは require 'mygame/boot' Font.render 'Hello World'

  • exec()で他ディレクトリのexeプログラムを実行したい

    url2bmpという、指定したURLのスクリーンショットを作成できるコマンドライン対応のソフトを使用しています。これをPHPから実行させたく、exec()関数を使っています。PHPプログラムとexeプログラムは同じ階層にあり、コードは exec("url2bmp.exe 以下、引数"); のようにしており、問題なく動作していました。 その後、url2bmp.exeを1階層下のフォルダに移し、コードも修正したのですが、動かなくなってしまいました。コードは以下の通りで exec("kasou/url2bmp.exe 以下、引数"); ディレクトリ指定は間違っていないはずであり、原因は明らかにurl2bmp.exeがPHPプログラムと同じディレクトリにないことなのですが、これの対処法は存在しないのでしょうか?同じコードをコマンドプロンプトで実行するとうまくいくのに、exec()関数では動かないという点に納得がいきません。

    • ベストアンサー
    • PHP
  • Javaでカレントディレクトリを移動するには?

    Javaの中で、カレントなディレクトリを移動させ、相対PATHで既存ディレクトリを認識させたいのですが、期待する結果が得られません。 Javaの中でカレントディレクトリを移動する場合、System.setProperty()メソッドを利用して、"user.dir"を書き換えれば良いと思ったのですが、間違いでしょうか? 間違いである場合、Javaの中ディレクトリを移動させる方法はあるのでしょうか? 以下のプログラムは、下記状況下にて実行したものです。 C:\Java |-app ←プログラムを実行時にいるフォルダ |-sub ←相対PATHで認識させたい既存フォルダ ----------- ソース -------------------------- import java.io.*; class TestTest { public static void main(String args[]) { System.out.println("Current dir : " + System.getProperty("user.dir")); System.out.println("Move Dir !"); System.setProperty("user.dir","C:\\Java"); System.out.println("Current dir : " + System.getProperty("user.dir")); File f = new File("sub"); System.out.println("Dir existance : " + f.exists()); } } --------------------------------------------- ----------------実行結果---------------------- C:\Java\app>java TestTest Current dir : C:\Java\app Move Dir ! Current dir : C:\Java Dir existance : false ←trueにならない! --------------------------------------------

    • ベストアンサー
    • Java