4.2 KiB
4.2 KiB
title | author | date | url | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|---|
『新版Perl言語プログラミングレッスン入門編』 第11章 ファイル操作のつづき | kazu634 | 2008-03-16 | /2008/03/16/_908/ |
|
|
つづき。
練習問題
次のようなファイルを読み込んで、数字部分を足してその合計順に表示させる。
さとうはなこ,佐藤花子,65,90,100,80,73
あべかずま,阿部一馬,8,7,23,21,24
いとうこういち,伊藤浩一,74,31,41,59,38
さとうたろう,佐藤太郎,100,95,98,82,61
むらまつしんじ,村松信二,55,48,79,90,88
しんどうさんたろう,新藤三太郎,74,41,59,31,38
私の回答:
use strict; use warnings; my $tmp_score; my %list; my $tmp_name; my @tmp; open(FILE, 'data.txt') or die "$!"; while (my $line =<FILE>) { @tmp = split(/,/, $line); $tmp_name = $tmp[1]; $tmp_score = $tmp[2] + $tmp[3] + $tmp[4] + $tmp [5] + $tmp[6]; $list{$tmp_name} = $tmp_score; } close(FILE); foreach (reverse(sort {$list{$a} <=> $list{$b} } keys %list)) { print "$_ : $list{$_}\n"; }
回答を見て思ったこと。
- my ($yomi, $name, @socres) = split (/,/, $line); という書き方はありなんですね。。。
あと、ハッシュの使い方とかソートの仕方とかを忘れていた(..;)