ディレクトリ内検索関数 | PHPerがrubyを使いはじめた

ディレクトリ内検索関数

※見やすくするため全角スペースでインデント。注意


ディレクトリ内検索関数(再帰的には作ってないため、そのディレクトリ内のみ検索)

あんまり作りこんでないですのでたいした機能はない。残念。


///////////////////////////////////
           PHP
///////////////////////////////////

引数1:ディレクトリパス ※ちなみに引数1が空だったり、ディレクトリじゃなかったりしたら空配列を返します(^^)

引数2:array("jpg","gif")を引数にした場合、ファイルの拡張子がjpgとgifのものを返す。


public function scanFiles($_dir, $search_ext=array()){
 if (empty($_dir) || !is_dir($_dir)) return array();

 $find_files = scandir($_dir);
 if($find_files === false ){

   return array();
 }else{

  foreach($find_files as $_key=>$_file){
   $pathinfo = pathinfo($_file);
   $ext = $pathinfo['extension'];
   if( array_search($ext, $search_ext) !== false){
    $files[] = $_file;
   }
  }
  return $files;

 }
}


///////////////////////////////////
           Ruby
///////////////////////////////////

こっちはruby。

オマケ機能で、頭に_(アンダーバー)が付いてるもの以外をGET。

正規表現も苦手なので、勉強のためやってみた。

ても勉強にもならない簡単なのだけどw


PHPと違うのは、ディレクトリが直接指定。定数とか直して。

あと、こっちはディレクトリのみ検索。ファイル検索したい場合は

Dir.glob(search_dir + "/[^_]*/") ⇒ Dir.glob(search_dir + "/[^_]*")

にすれば良かった希ガス。


def scan_dir

 dir_path = "#{RAILS_ROOT}/#{SEARCH_PATH}"
 return Dir.glob(dir_path + "/[^_]*/").collect{|f|File.basename(f)}
end


ん~とりあえずこんなとこかな。