# csv2fcsv.pl
# 内容 :CSVファイルを固定長CSVファイル（一定の箇所に「,」があるテキスト形式）に変換する
# 前提 :入力ファイルとスクリプトはshift_jisとする。
# Copyright (c) 2002-2011 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>perl csv2fcsv.pl
#
use Encode;

open(IN1,"csv.txt");
open(OUT1,">output.txt");
@fields	=	(10,5,7,1,1,1,8,8,8,2,2,4);	
for	($i	=	0;	$i	<=	$#fields;	$i++)	{	
	$fields[$i]	=	"A".$fields[$i];	
}	
while	($line1	=	<IN1>)		{
# shift_jis から utf-8(Perlの内部コード) に変換
	$line1	=	decode('cp932', $line1);
	chomp($line1);
# CSV形式の $line1 から値を取り出して @in1 に入れる 
	my $tmp	=	$line1;
	$tmp	=~	s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
	@in1	=	map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_}
				($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);

#文字数(ここでは5文字)にあわせて、全角スペースを入れておく。
	$in1[1]	=	$in1[1].decode('cp932', "　" x 5);
	for	($i	=	0;	$i	<=	$#in1;	$i++)	{	
		$in1[$i]	=	pack($fields[$i],$in1[$i]);	
	}	
	$out1	=	join(",",@in1);
# utf-8(Perlの内部コード) から shift_jis に変換
	$out1	=	encode('cp932', $out1);
	print	OUT1	"$out1\n";
}	
close(IN1);	
close(OUT1);	
