■ CGI初歩の初歩

■ CSVデータを加工して表示する

#!/usr/local/bin/perl

#------------------------------------------------------------------------------
$title = "テスト結果";
#------------------------------------------------------------------------------

print "Content-type: text/html\n\n";

    print <<"EOM";
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">

<title>$title</title>

<META http-equiv="Content-Style-Type" content="text/css">

</HEAD>
<BODY>

<table border=1 width="80%" align="center" CELLSPACING="0" CELLPADDING="2">
<tr>
<td width="10%">氏名</td>
<td width="15%" align=\"right\">国語</td>
<td width="15%" align=\"right\">数学</td>
<td width="15%" align=\"right\">社会</td>
<td width="15%" align=\"right\">理科</td>
<td width="15%" align=\"right\">英語</td>
<td width="15%" align=\"right\">合計</td>
</tr>\n
EOM

&Disp;

print <<"EOM";
</table>
</BODY>
</HTML>
EOM

exit;

#
# CSVファイルからデータを読み込み表示する
#
sub Disp {
    if( !open(IN, "mm.txt") ) {
        print "データファイルがオープンできません<BR>\n";
    }
    else {
        $i = 0;
        while ($line = <IN>) {
            # 読み込んだデータを分離する
            my ($name, $kokugo, $sansuu, $shakai, $rika, $eigo) = split(/,/,$line);
            # 合計を計算する
            my $goukei = $kokugo + $sansuu + $shakai + $rika + $eigo;
            print <<"EOM"
<tr>
<td width="10%">$name</td>
<td width="15%" align=\"right\">$kokugo</td>
<td width="15%" align=\"right\">$sansuu</td>
<td width="15%" align=\"right\">$shakai</td>
<td width="15%" align=\"right\">$rika</td>
<td width="15%" align=\"right\">$eigo</td>
<td width="15%" align=\"right\">$goukei</td>
</tr>\n
EOM
        }
        close(IN);
    }
}

表示するCSVファイル
飯田,73,69,75,86,89
安倍,79,69,42,74,71
保田,76,77,87,71,93
矢口,75,77,70,87,53
石川,70,62,64,69,73
吉澤,65,53,39,61,52
辻,45,78,51,51,24
加護,42,51,48,50,60
高橋,66,72,55,79,74
紺野,87,89,96,93,48
小川,77,85,64,71,58
新垣,57,38,49,48,66

実行結果

テスト結果
氏名 国語 数学 社会 理科 英語 合計
飯田 73 69 75 86 89 392
安倍 79 69 42 74 71 335
保田 76 77 87 71 93 404
矢口 75 77 70 87 53 362
石川 70 62 64 69 73 338
吉澤 65 53 39 61 52 270
45 78 51 51 24 249
加護 42 51 48 50 60 251
高橋 66 72 55 79 74 346
紺野 87 89 96 93 48 413
小川 77 85 64 71 58 355
新垣 57 38 49 48 66 258

 一つ前のスクリプトを機能アップして、合計を表示するようにしてみました。このスクリプトでは合計だけですが、偏差値を計算して表示するなど、スクリプトを修正して機能アップすることが可能ですね。