dポイントプレゼントキャンペーン実施中!

課題で出されたツールを自分で書いてみたんですが、エラーが起こる理由が分からないので教えて頂きたいです。
↓リンク先に書いてみたスクリプトとエラー内容が書いてあります。
http://ideone.com/pjxA5

課題の内容は、コマンドプロンプトの引数でディレクトリ名を与えて、そのディレクトリにあるファイルやサブディレクトリにあるファイルから拡張子が「.c」「.cpp」のものを再帰的に全て探します。

探した拡張子のファイルの中身に「//」で始まる行(コメント行)があればすべて置換して消すようにする、といった感じの内容になっています。

rubyを始めてそんなに経っておらず分からない事だらけなので、構文が間違ってるなど、エラーが出る理由を教えて頂ければと思います。

A 回答 (4件)

rubyのバージョンが1.9のようですので、magic commentを入れておいてください。


それがないと思わぬエラーがでたりしますので、
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fm17 …

それとデバッガを使ってみてください。
ruby -rdebug xxxx xxxx
のように-rdebugを入れれば使えるようになります。
またrubygemsからruby-debugをインスールする方法もあります。

`initialize': Permission denied - dir1
の周辺にどの行でエラーがあるのか情報があるはずです。dir1フォルダが書き込み(読み込み)禁止になっているような感じですが。

デバッガを使うのが解決の近道だと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返信が遅くなってしまいすみません。

rubyを始めたばかりなのでデバッガあるとは知りませんでした。

試してみたところ、エラーの内容はよくわからなかったのですが、フォルダが書き込み禁止になっていただけというものすごく単純な事だったみたいです。
プログラムの間違ってる箇所ばかり探していたので、初歩的なことに気づけませんでした(-_-;)

無事動くようになったのでご回答本当に助かりました。

お礼日時:2012/08/20 18:09

No.2です



MacRuby 0.12 (ruby 1.9.2)
ですが、
No.3にkmeeさんが書かれているのと同じ結果です。
Errno::EISDIR: Is a directory - read() failed
となります。

dir1が読み込みが禁止されている場合にはopenで
Errno::EACCES: Permission denied - open() failed
となりますので、実際にはeachの前の17行めのopenでエラーになっているのではないかと思います。

質問者さんはWindowsのようですので、エラーメッセージが微妙に違う可能性はありますが

課題のようですので、ヒントだけ
Dir.glob("#{dir}/*")でファイル名を取得しするのがよいように思います。current directoryよりの相対パスでファイル名が得られます。

他にも気がついた範囲で
(動作確認はしていないので正しいかは分かりません)
24行目directory?(fullpath)はクラスメソッドに

37行目temp = Tempfile::new(file)は
temp = Tempfile.new(file)に

40行目f.read.each{|line|は
f.each{|line|に
    • good
    • 0
この回答へのお礼

返信おそくなってしまい申し訳ございません。

一応フォルダの書き込み禁止が原因だったみたいですが、こちらに書かれているようにスクリプトを修正してみました。
こちらでも問題なく動きましたし、記述的にもスッキリしますね。

再びご回答ありがとうございました。

お礼日時:2012/08/20 18:14

組み込み関数open→戻り値のFileクラスのインスタンス って、ディレクトリ内のファイル検索に使えましたっけ?



手許のRuby1.8.7p370,Mac では、openはエラーにならないけど、eachでErrno::EISDIR: Is a directory となりました。
    • good
    • 0
この回答へのお礼

先生はこの方法でもできる的なことを言ってた気がしたんですが、できないんですかね?

一応修正して動くスクリプトは書けたのでこれで問題ないかなと思っています。

回答ありがとうございました。

お礼日時:2012/08/20 18:17

エラーメッセージ通りなら、このプログラムを実行するときに引数を渡してないのでdir変数に値が入っていないんだと思うのですが。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
一応引数として「ruby Sub.rb dir1」このようにディレクトリ名を与えたのですが、「`initialize': Permission denied - dir1」というエラーが出てしまいます。
これはコマンドの記述方法が正しくない、ということなんですかね?

お礼日時:2012/08/03 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!