--- title: 『新版Perl言語プログラミングレッスン入門編』 第11章 ファイル操作のつづき author: kazu634 date: 2008-03-16 url: /2008/03/16/_908/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3829;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl - Programming ---
つづき。
次のようなファイルを読み込んで、数字部分を足してその合計順に表示させる。
さとうはなこ,佐藤花子,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"; }
回答を見て思ったこと。
あと、ハッシュの使い方とかソートの仕方とかを忘れていた(..;)