1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ] "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 29箱目 pc11.2ch.net/test/read.cgi/tech/1166708139/ リンク集は>>2-3 過去スレは>>4
799 名前:デフォルトの名無しさん [2007/05/26(土) 04:09:08 ] >>797 さてコレをどれくらい短くできるだろうか use strict; open FILE, "data.csv"; my @data; my @index; my @ys; for my $line (<FILE>) { chomp $line; unless (@index) { @index = split(/\s*,\s*/, $line); shift @index; next; } my($y, @d) = split(/\s*,\s*/, $line); push(@ys, $y); for (my $i=0; $i < @d; $i++) { $data[ $index[$i] ][ $y ] = $d[$i]; } } close FILE; open FILE, ">out.csv"; for my $x (@index) { for my $y (@ys) { print FILE "$x, $y, $data[$x][$y]\n"; } }
800 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:04:48 ] >>799 use strict; open FILE, "data.csv"; my(@data, @index, @ys); while(<FILE>) { chomp; my($y, @d) = split /\s*,\s*/; @index = @d, next unless @index; push @ys, $y; $data[ $index[$_] ][$y] = $d[$_] for 0..@d-1; } open FILE, ">", "out.csv"; for my $x (sort {$a <=> $b} @index) { for my $y (sort {$a <=> $b} @ys) { print FILE "$x, $y, $data[$x][$y]\n"; } } close FILE;
801 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:26:14 ] 一応質問者の為に一行サービスしといたけど。本嫁本。 こんなの例題に出てくるだろが。 open IN, "data.csv" ; open OUT, ">", "out.csv" ; print OUT "X,Y,Z\n" ; (undef,my @index ) = split /,/, do{ $_ = <IN> ; s/\s+//g ; $_ } ; for ( reverse (<IN>) ){ s/\s+//g ; next if /^#/ ; my ( $index, @dat ) = split /,/ ; for my $i ( 0 .. $#dat ){ print OUT join "," ,$index,$index[$i],$dat[$i] . "\n" ; } } close IN ; close OUT ;