Perl/Perlの基礎知識

Perlで都道府県順にエクセル表を並べ変える(2ページ目)

Perlを使ってエクセル表(CSV)のデータを都道府県順に並べ替える方法。並べ替えの順番を外部ファイルに記録して、メンテナンスをしやすくする方法を紹介します。

井上 みやび子

執筆者:井上 みやび子

Perlガイド

都道府県名でのエクセル並べ替えサンプルコード

この sort のカスタマイズの仕組みを利用して都道府県順に並べ替えを行うのですが、いちいちハッシュをプログラムコード内に定義するのは面倒ですね。運用上、順番を分かりやすく指定する事も重要ですので、並べ替えの順番の指定は外部のテキストファイルに指定して、自動的にハッシュを構成する事にします。

プログラム全体以下のようになりました。sort の指定はさらに複雑になっていて、$a、$b には配列の要素であるハッシュ (の参照) が代入されます。ここから都道府県名を取り出して、さらにその値で %index を調べます。

並べ替え対象CSVファイルのサンプル

1,株式会社山田商事,1230094,東京都,杉並区,高円寺東3-3-3
2,株式会社鈴木貿易,9870021,大阪府,大阪市南区,島中9-9-9
3,三晃珈琲有限会社,0032912,北海道,札幌市,北東12条3
4,株式会社鈴木貿易,9870021,大阪府,大阪市南区,島中9-9-9

プログラムコード

#!/usr/bin/perl --

# CSVの一覧を都道府県順に並べ替える
# usage: perl sort_by_pref.pl INPUT_CSV > OUTPUT_CSV

use strict;
use warnings;
use utf8;

my (%conf, %index);

# 環境設定

# 並べ替え対象ファイル
$conf{input_csv} = shift @ARGV; #実行時にコマンドラインから指定したファイル名が @ARGV に格納されている
$conf{csv_enc} = 'cp932'; #文字コード

# 都道府県設定ファイル (都道府県名を並べ替え順に列挙したもの) 
$conf{pref_list} = 'prefs.txt';
$conf{pref_enc} = 'cp932'; #文字コード

# 処理

# 都道府県設定を読み込み、ハッシュに格納
my $fh;
open ($fh, "<:encoding($conf{pref_enc})", $conf{pref_list})
	or die "Can't open $conf{pref_list}: $!\n"
	;

my $i=0;
while (<$fh>){
	$_ =~ s/\s+//g; #空白は除く。
	$index{$_} = ++$i; # ++ で1を加算してから順位として代入する。
}
close ($fh);

# CSV を読み込み。左から4番目の列が都道府県
open ($fh, "<:encoding($conf{csv_enc})", $conf{input_csv})
	or die "Can't open $conf{input_csv}: $!\nusage: perl sort_by_pref.pl INPUT_CSV > OUTPUT_CSV\n"
	;

# まずは情報を配列に入れてしまう。 (つまり、あまり大きいファイルには使えない) 
my @lines; # 各要素の構成:{line => 行全体、pref => 都道府県}
while (<$fh>){
	push(@lines, {line=>$_, pref=>(split(/,\s*/, $_))[3]}); # カンマで区切った4番目の要素を取り出す
}
close ($fh);

# 並べ替えと出力
# 書き出し文字コードを準備
binmode STDOUT, "encoding($conf{csv_enc})";

# $a, $b にはそれぞれ配列に格納したハッシュが入るので、そこに格納されている
# 都道府県情報を元に %index を調べる
for (sort {
	$index{$a->{pref}} <=> $index{$b->{pref}}
} @lines){
	print $_->{line};
}
close ($fh);

実行コマンド例

perl sort_by_pref.pl sample.csv > result.csv
【編集部おすすめの購入サイト】
Amazonで Perl 関連の書籍をチェック!楽天市場で Perl 関連の書籍をチェック!
  • 前のページへ
  • 1
  • 2
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます