- ベストアンサー
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において、ディレクトリ」のみを持ってくるには、どのようにすれば良いでしょうか? 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>この.、..をスキップする方法はあるでしょうか? 普通にスキップすればいいんじゃない? Dir.foreach('C:/Documents and Settings/') do |file| if FileTest.directory?(file) && file != '.' && file != '..' puts file end end
その他の回答 (4)
- koko_u_
- ベストアンサー率18% (459/2509)
気になったのですが、item.chomp! する理由がわかりません。 そして個人的にはコードが追い掛けにくくなるので Dir.foreach('C:/data') do |item| unless FileTest.directory?(item) next end puts item end という風に「スキップする条件」を書くのではなく、 Dir.foreach('C:/data') do |item| if FileTest.directory?(item) puts item end end という風に「処理対象となる条件」を書くほうがよいと感じます。
お礼
koko_u_さん、ありがとうございます。 item.chompとしている理由は、後の処理で、CRが入っていると困るからです。 >「処理対象となる条件」を書くほうがよい 了解です。確かに、その方が分かりやすいですね。 ありがとうございます。
- tatsu99
- ベストアンサー率52% (391/751)
>結果は、フォルダネームのみならず、 .及び..が出てきてしまいました。 .も..もフォルダです。 .は、現在(自分自身)のディレクトリ ..は、一つ上のディレクトリ(自分の親ディレクトリ) を意味します。 >この.、..をスキップする方法はあるでしょうか? このディレクトリのみ、スキップする処理を更に組み込みます。 以下のようにして下さい。 Dir.foreach('C:/Data'){|item| item.chomp! if !FileTest.directory?(item) next end --------下記文を挿入------------ if item == "." || item == ".." next end --------挿入終わり--------- print item,"\n" }
お礼
tatsu99さん、ありがとうございます。 理解できました。
- dekopa-
- ベストアンサー率42% (161/378)
next unless FileTest.Directory?(item) で、itemがディレクトリでない場合次に行きます。
補足
ありがとうございます。試して見ました。 結果は、フォルダネームのみならず、 .及び..が出てきてしまいました。 この.、..をスキップする方法はあるでしょうか?
- tatsu99
- ベストアンサー率52% (391/751)
ディレクトリでないなら、スキップするようにします。 Dir.foreach('C:/Data'){|item| item.chomp! --------下記文を挿入------------ if !FileTest.directory?(item) next end --------挿入終わり--------- print item,"\n" }
補足
ありがとうございます。試して見ました。 結果は、フォルダネームのみならず、 ..が出てきてしまいました。 この..をスキップする方法はあるでしょうか?
お礼
koko_u_さん、ありがとうございます。 だんだんと、RUBYが分かるようになってきました。