僕はPERL使いです。
PHP嬢も嫌いじゃないけど、やっぱり愛しいのは、何故かPERL君なんです。
で、最近、愛しいPERLを使った教材らしきものを何か作れないかな〜と、
思いつつ、便利なSUBプログラム集みたいなのを、
焼酎なんぞ舐めながら、眠れない深夜に製作しています。
今回は、その中から、簡単で便利なSUBプログラムを一つ。
PERLを少しでも使っている人だったら、簡単に利用できますので。
これは「CSVを任意の項目でソート」を目的としています。
例えば、住所録や名簿等を
日時やフリガナでソートしたい時に使ってください。
■まずは使い方
@SORTED = &CSVsort(\@CSV_LIST,'2');
※CSVの配列(リスト)は、リファレンスで渡します。(「\」を前に付ける)
※「2」は、CSVの3項目でソートしますよ、という事です。
項目は、0(ゼロ)から数えます。
ですので、CSVの4項目でのソートだと、「2」が「3」になります。
■簡単な解説
※以下のようなCSVがあるとします。
※各フィールドは、以下です。
通しNO,名前,フリガナ,生年月日,
001,田中和男,タナカカズオ,19750102,
002,山田敏子,ヤマダトシコ,19790203,
003,上田太郎,ウエダタロウ,19770304,
004,鈴木義男,スズキヨシオ,19860505,
005,佐藤良子,サトウリョウコ,19820606,
これが「@CSV_LIST」に格納されているとします。
@CSV_LIST = (
'001,田中和男,タナカカズオ,19750102',
'002,山田敏子,ヤマダトシコ,19790203',
'003,上田太郎,ウエダタロウ,19770304',
'004,鈴木義男,スズキヨシオ,19860505',
'005,佐藤良子,サトウリョウコ,19820606',
);
こんな感じで。
※ちなみに、逆ソートする時は、
「$tmp[$a] <=> $tmp[$b] or $tmp[$a] cmp $tmp[$b]」の部分の、
「$a」と「$b」を逆にするだけです。
■サブ・プログラム
sub CSVsort {
my (@list,$kou,$type,$DELIMITER);
@list = @{$_[0]};
$kou = $_[1];
$DELIMITER = ',';
@tmp = map {(split /$DELIMITER/)[$kou]} @list;
@list = @list[sort {$tmp[$a] <=> $tmp[$b] or $tmp[$a] cmp $tmp[$b]} 0 .. $#tmp];
return @list;
}
シンプルなサブ・プログラムです。
ただ、これが結構バカにできません。
5000人位のリストでも、問題なくソート出来ますので
もし良かったら使ってください。
ただ、5000人(5000レコード)とか超えたら、
やっぱりSQLとか使ってくださいね。
PERLには、DBIという素晴らしいSQL狂いもいますし。
■実際に動いている例
http://www.tsunetoshi-tanaka.com/perl_pg/03.cgi
PS.
何回も紹介していますが、これは、ホントお薦めの教材です。
ずっとロングセラーを記録しています。
▼▼▼
田中洋平さんの「動画でわかるDVDパソコン教室」
日本で発売されているソフトのほとんどが網羅されています。
今、収監中の堀江貴文さんが推薦しているから、ちょっと?
と思う人もいるかもしれないけれど。
高額なパソコン教室に通うなんてもったいない。
iPhone用のデータも付いてくるので、
これがあれば、いつでもどこでも学べます。
今、少しだけど、値下げされていますよ。
▼このHPに連動した、メルマガも発行させてもらっています。もし気分が乗ったら、登録してもらえれば嬉しいです。
☆リンク集