• ベストアンサー

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において、ディレクトリ」のみを持ってくるには、どのようにすれば良いでしょうか? 宜しくお願いいたします。

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

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>この.、..をスキップする方法はあるでしょうか? 普通にスキップすればいいんじゃない? Dir.foreach('C:/Documents and Settings/') do |file|  if FileTest.directory?(file) && file != '.' && file != '..'   puts file  end end

noname#95859
質問者

お礼

koko_u_さん、ありがとうございます。 だんだんと、RUBYが分かるようになってきました。

その他の回答 (4)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.5

気になったのですが、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 という風に「処理対象となる条件」を書くほうがよいと感じます。

noname#95859
質問者

お礼

koko_u_さん、ありがとうございます。 item.chompとしている理由は、後の処理で、CRが入っていると困るからです。 >「処理対象となる条件」を書くほうがよい 了解です。確かに、その方が分かりやすいですね。 ありがとうございます。

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

>結果は、フォルダネームのみならず、 .及び..が出てきてしまいました。 .も..もフォルダです。 .は、現在(自分自身)のディレクトリ ..は、一つ上のディレクトリ(自分の親ディレクトリ) を意味します。 >この.、..をスキップする方法はあるでしょうか? このディレクトリのみ、スキップする処理を更に組み込みます。 以下のようにして下さい。 Dir.foreach('C:/Data'){|item| item.chomp! if !FileTest.directory?(item)  next end --------下記文を挿入------------ if item == "." || item == ".."  next end --------挿入終わり--------- print item,"\n" }

noname#95859
質問者

お礼

tatsu99さん、ありがとうございます。 理解できました。

  • dekopa-
  • ベストアンサー率42% (161/378)
回答No.2

next unless FileTest.Directory?(item) で、itemがディレクトリでない場合次に行きます。

noname#95859
質問者

補足

ありがとうございます。試して見ました。 結果は、フォルダネームのみならず、 .及び..が出てきてしまいました。 この.、..をスキップする方法はあるでしょうか?

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

ディレクトリでないなら、スキップするようにします。 Dir.foreach('C:/Data'){|item| item.chomp! --------下記文を挿入------------ if !FileTest.directory?(item)  next end --------挿入終わり--------- print item,"\n" }

noname#95859
質問者

補足

ありがとうございます。試して見ました。 結果は、フォルダネームのみならず、 ..が出てきてしまいました。 この..をスキップする方法はあるでしょうか?

関連するQ&A