# readdir2.pl
# 内容 :　フォルダ内のファイル名を出力
# 　　　　(サブフォルダ内もすべて出力)
# Copyright (c) 2013 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>perl readdir2.pl
#

$dir	=	"c:/Perl64/html/";
open(OUT1,">temp.txt");

file_name($dir); 

sub file_name()				{
	my	($dir)	=	@_;
	opendir(IN1,$dir);
	my	@filename	=	readdir(IN1);
	my	$i;
	for		($i	=	0;	$i	<=	$#filename;	$i++)	{	
# フォルダ以外の場合
		if		(-f	$dir.$filename[$i])			{
				$out1	=	join("\t",$filename[$i],$dir);
				print	OUT1	"$out1\n";	
		}
# フォルダの場合(カレントフォルダと親フォルダを除く)
		elsif	(($filename[$i]	ne	".")
			&&	($filename[$i]	ne	".."))		{
				my	$sv_dir	=	$dir;
				$dir	=	$dir.$filename[$i]."/";
# サブフォルダ内の処理
				file_name($dir);
# カレントフォルダに戻る
				$dir	=	$sv_dir;
		}
	}
}

closedir(IN1);
close(OUT1);

#   
open(IN1,"temp.txt");	
open(OUT1,">filename.txt");	

# ソートキーの入っている項目番号
@sortkey	=	(1,0);
# ソートキーをセットするハッシュのキー
$key	=	undef;
# ソート用のキーと1行分レコードをセットするハッシュ
%sort_record	=	();
# 入力ファイルを全部読み込む。
@record	=	<IN1>;	
# ソートキーとなる項目番号からソートキーとなる文字列を作っておく。
#recno番目のレコードがrecordである。
foreach	$recno	(0..$#record)	{
	chomp($record[$recno]);
# 入力ファイルをタブで分解する。
	@in1	=	split("\t",$record[$recno],-1);
# ソートキーとなる項目の内容をタブで連結してハッシュのキーとする。
	foreach	$sortno	(@sortkey)	{	
		$key	.=	lc($in1[$sortno]) . "\t";
	}	
# 同じ値を持つキーが複数存在する場合に以下のように指定する。
	$key	.=	sprintf("%08d",$recno);
# レコードをハッシュの値としてセットする。
	$sort_record{$key}	=	$record[$recno];
	$key	=	undef;
}
# ハッシュのキーをソートし、キー順にレコードを出力する。
foreach	$recno	(sort	keys	%sort_record)	{
		print	OUT1	"$sort_record{$recno}\n";
}
close(IN1);
close(OUT1);
