#!/usr/local/bin/perl #注意 !! このプログラムは、dos窓でのみ作動する use strict; use warnings; use utf8; #このプログラムは、utf-8で記述されている #use open IN => ":encoding(cp932)";#Shift JIS用 #use open OUT => ":encoding(cp932)"; use open IN => ":utf8"; #utf-8用 use open OUT => ":utf8"; my %data = (); #cust_data.csvファイルの構造: #  29179,横山○☆夫,62,滋賀県,▲□▲□区 #このshift_data.csvファイルはShift JISで記述されている #このutf8_data.csvファイルはutf-8で記述されている #open(IN, 'shift_data.csv'); open(IN, 'utf8_data.csv'); while(){ # chomp; my ($id, $name, $age, $ken, $shi) = split(/,/, $_); my $people = [$id, $name, $age]; # 人データを作る push(@{$data{$ken}{$shi}}, $people); #data配列に保存する } close(IN); # 出力ファイルを開く #cust_out.txtファイルの構造: #神奈川県 # ★▲□□市 # 91585,和田○☆美,64 #このtxtファイルが、Shift JIS または、utf-8かは、 # use open OUTで設定される open(OUT, ">cust_out.txt"); foreach my $ken (keys %data){ print OUT $ken, "\n"; # 県名の表示 # 県名に対する値(市区がキーの連想配列)を取り出す my $ken_val = $data{$ken}; foreach my $shi (keys %{$ken_val}){ # 市区を表示 print OUT "\t", $shi, "\n"; # 県名・市区に対する値(人を含んだ配列)を取り出す my $shi_val = $data{$ken}{$shi}; foreach my $people (@$shi_val){ # カンマで区切って表示する print OUT "\t\t", join(',', @$people), "\n"; } } } close(OUT);