#!/usr/local/bin/perl #注意 !! このプログラムは、dos窓でのみ作動する use strict; use warnings; use utf8; #このプログラムは、utf-8で記述されている use Encode; my %data = (); #shift_data.csvファイルはShift JISで記述されている open(IN, 'shift_data.csv'); while(){ # chomp($_); # Shift JISの文字列をデコードして、内部文字列に変換した my $line = decode('cp932', $_); my ($id, $name, $age, $ken, $shi) = split(/,/, $line); my $people = [$id, $name, $age]; push(@{$data{$ken}{$shi}}, $people); # my $line0 = encode('shiftjis', $line); my $line0 = encode('cp932', $line); print $line0; } close(IN); #utf8_data.csvファイルはutf-8で記述されている open(IN, 'utf8_data.csv'); while(){ # chomp($_); # UTF-8の文字列をデコードして、内部文字列に変換した my $line = decode('utf8', $_); my ($id, $name, $age, $ken, $shi) = split(/,/, $line); my $people = [$id, $name, $age]; push(@{$data{$ken}{$shi}}, $people); } close(IN); open(OUT, ">cust_out.txt"); foreach my $ken (keys %data){ my $ken0 = encode('shiftjis', $ken); print OUT $ken0, "\n"; # 県名の表示 # 県名に対する値(市区がキーの連想配列)を取り出す my $ken_val = $data{$ken}; foreach my $shi (keys %{$ken_val}){ # 市区を表示 # 内部文字列をShift_JISバイト文字列に変換する my $shi0 = encode('shiftjis', $shi); print OUT "\t", $shi0, "\n"; # 県名・市区に対する値(人を含んだ配列)を取り出す # my $shi_val = $data{$ken}{$shi}; # print OUT "\t", $shi_val, "\n"; # foreach my $people (@$shi_val){ # カンマで区切って表示する # print OUT "\t\t", join(',', @$people), "\n"; # } } } close(OUT);