blog/content/post/2008/03/16/2008-03-16-『新版perl言語プログラミング...

4.2 KiB

title author date url wordtwit_post_info categories
『新版Perl言語プログラミングレッスン入門編』 第11章 ファイル操作のつづき kazu634 2008-03-16 /2008/03/16/_908/
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";}}
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";
}

回答を見て思ったこと。

  • my ($yomi, $name, @socres) = split (/,/, $line); という書き方はありなんですね。。。

あと、ハッシュの使い方とかソートの仕方とかを忘れていた(..;)