# csvsort2.pl     
# 内容 :　対象ファイルをCSV形式としてソートする
# 　　　　文字列型の昇順・降順、数値型の昇順・降順の並べ替えを行う。
# 　　　　(通貨記号や","つきの数字は数値型としての並べ替えはできない)
# Copyright (c) 2009 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>perl csvsort2.pl
#
open(IN1,"input.txt");	
open(OUT1,">output_s.txt");	

  # CSVファイルの入力
@record		=	();
$in1_ctr	=	0;
while	($line1	=	<IN1>)	{

	chomp($line1);
	$line1	=~	s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
	@in1	=	map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_}
				($line1 =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);

	$record[$in1_ctr]	=	join("\t",@in1);
	$in1_ctr++;

#	chomp($line1);
#	$record[$in1_ctr]	=	$line1;
#	$in1_ctr++;
}

  # CSVファイルの並べ替え
# 文字列タイプの昇順:$a[1]	cmp	$b[1] #2番目の項目の昇順
# 文字列タイプの降順:$b[0]	cmp	$a[0] #1番目の項目の降順
# 数値タイプの昇順:$a[1]	<=>	$b[1] #2番目の項目の昇順
# 数値タイプの降順:$b[0]	<=>	$a[0] #1番目の項目の降順

	@sort_rec	=	sort	{	
								my @a	=	split("\t", $a);
								my @b	=	split("\t", $b);
								$a[2]	<=>	$b[2]
										or
								$a[3]	<=>	$b[3];
					}
					@record;

  # CSVファイルの出力
foreach	$record	(@sort_rec)	{
	print	OUT1	"$record\n";
}

close(IN1);
close(OUT1);
