【Perl】CSVファイルの読み込み

PerlでのCSVファイルの読み込み

顧客CSVファイルとアンケートCSVファイルを読み込んで、結果ファイルを出力させる

サンプルプログラム

readCSV.cgi

#!C:/Perl/bin/perl

# 最初に、顧客の住所を全てハッシュ(メモリ上)に取り込む
my %address_datas = ();
open(IN, 'address.csv');
while(<IN>){
    chomp;
    my ($id, $name, $address) = split(/,/, $_, 3);

    # (※1)顧客IDをキーとし、対応する名前と住所の配列を保存する
    $address_datas{$id} = [$name, $address];
}
close(IN);

# アンケートデータに氏名と住所をマージする
open(OUT, '>result.csv');
open(IN, 'enquate.csv');

while(my $line = <IN>){
    chomp($line);
    my ($id, $ans1, $ans2, $ans3) = split(/,/, $line, 4);

    # この行にマッチする顧客データを検索する
    my $ref_data = $address_datas{$id};

    # 配列の0番目に名前、1番目に住所が入っている (※1を参照)
    my $name    = $ref_data->[0];
    my $address = $ref_data->[1];

    # 出力する
    print OUT join(',', $id, $ans1, $ans2, $ans3, $name, $address), "\n";
}

close(OUT);
close(IN);

print "Content-type: text/html\n\n";
print <<"HERE";
<html lang=ja>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <title>Hello, CGI !</title>
  </head>

  <body bgcolor="#FFFFCC" text="#000000">
HERE
print "    <h2>Successful!!</h2>\n";
print <<"HERE";
  </body>
</html>
HERE

exit;

address.csv

0001,マイク,アメリカ3丁目
0002,トム,パリス横丁
0003,メアリー,ドイツ坂

enquate.csv

はい,はい,大きい
いいえ,はい,普通
はい,いいえ,小さい