Namazu-win32-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: フォルダ名の最後が「表」の場合のインデックス作成



 村井と申します。

 5月に投稿した内容に誤りがありましたので訂正します。
 Perl のプログラムの中で、配列の要素を「$」でなく「@」
で始めておりました。初歩的な勘違いでお恥ずかしい次第です。
 このように記述しても Perl はエラーメッセージも出さず、
適宜実行してくれます。従って前のままで問題はないとは思
いますが、誤りであることに間違いありませんので、訂正し
ます。失礼いたしました。


///////////////////////////////////////////////////

変更対象 : \namazu\bin\ の中にある mknmz 
  (拡張子の無いもの、 mknmz.bat ではない)
この中の find_target というサブルーチンの内部に下記のよ
うなサブルーチン(x_search)を加えると共に、5行をコメ
ント化し、3行を追加する。

///////////////////////////////////////////////////

	    #
	    # Wanted routine for File::Find's find().
	    #
	    # my $wanted_closure = sub { # コメント化
		# my $fname = "$File::Find::dir/$_"; # コメント化
		# add_target($fname, \@flist, \%counts); # コメント化
	    # };# コメント化
	    # find($wanted_closure, @subtargets) if (@subtargets > 0);#
コメント化


            for my $XS (@subtargets){ # 追加
                 &x_search($XS); # 追加 
            } # 追加


	} else {
	    print STDERR _("unsupported target: ") . $target;
	}
    }

#追加 ここから
sub x_search($){
   my @xd_names=();
   my $xd_count=0;
   my @x_names=();
   my ($xd0) = @_;
   if ($xd0 =~ /\/\z/ ){      # 最後に'/'が付いていればそのまま
      $xd_names[$xd_count] = $xd0;
   }
   else{      # '/'を付加
      $xd_names[$xd_count] = $xd0 . '/';
   }      
   while ($xd_count >=0) {
      my $xd1=$xd_names[$xd_count];
      if (opendir (XDIR,$xd1)){
         @x_names=readdir XDIR;
         closedir XDIR;
         for my $XN (@x_names){
            next if $XN =~ /^\.{1,2}\z/;    # "." ".." だったら next
            my $xd2 = $xd1 . $XN;
            if (-f $xd2){       # ファイルの場合はflistに追加
               add_target($xd2, \@flist, \%counts);
               next;
            }
            my $xd3 = $xd2 . '/';
            if (-d $xd3){      # ディレクトリの場合は自分の配列に追加
               $xd_names[$xd_count++]= $xd3;
               next;
            }
            print "Unknown type   $xd2\n";
            next;
         }
      }      
      else{
         print "Can't opendir   $xd1\n";
      }
      $xd_count--;
   }
   return;
}
#追加 ここまで

    # uniq @flist
    my %mark = ();
    @flist = grep {$mark{$_}++; $mark{$_} == 1} @flist;

    # Sort file names with consideration for numbers.
    @flist = map  { $_->[0] }
	     sort { $a->[1] cmp $b->[1] } 
	     map  { my $tmp = $_; $tmp =~ s/(\d+)/sprintf("%08d",
$1)/ge; 
		    [ $_, $tmp ] } @flist;



///////////////////////////////////////////////////

  村井 俊文     E-mail:murai.t-fs@xxxxxxxxx