重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

僭越ながら、質問させていただきます。
タブ記号で区切られたTSVファイルというものを扱っているのですが、まずtest.tsvファイルを配列に格納して、そこから2列目の値すべてを降順にソートし、
(列をソートした結果の行は、ちゃんと最初のまま保持され、バラけずに出力されるようにしたい)
その結果をresult.txtに表示させるプログラムを作りたいと思っております。
ですが、自分が書いたプログラムではまったく動かず、どこが悪いのかも情けないことにわかりません…。
 かれこれ何時間も悩んでいますが、まったく方策が見出せません。どこをどう直せばいいのか、ヒントだけでも構いませんので、教えてくださいませんでしょうか。
プログラムは以下です。

#!/usr/bin/perl

use strict;
use warnings;
use Fatal qw/ open /;
my @values;
my $tsv_file = "test.tsv";
my @tsv = &readtsvfile($tsv_file);

@values = sort { $a->[1] cmp $b->[1] } @tsv;

open(DATAFILE, '>>result.txt') or die("error :$!");
foreach(@tsv){
print DATAFILE;
}

sub readtsvfile {
open(IN, $_[0]);
while(<IN>) {
chomp;
push @tsv, [ split(/\t/) ];
}
close(IN);
return @tsv;
}

close DATAFILE;


このプログラムの手直しでも新しい方法でもなんでも構いません、何か教えてくだされば、本当にありがたいです。よろしくお願いします。

A 回答 (1件)

期待かわかりませんがこれでどうでしょうか。



#!/usr/bin/perl

$tsv_file = "test.tsv";

open(IN,"$tsv_file");
@InFile = <IN>;
close(IN);

@sortdata = sort { (split(/\t/,$a))[1] <=> (split(/\t/,$b))[1]} @InFile;

open(OUT, '>>result.txt');
print OUT @sortdata;
close(OUT);

ソートについては参照URLに詳しく書いてあるので見てみるといいです。

参考URL:http://www1.parkcity.ne.jp/chaichan/src/perl07.htm
    • good
    • 0
この回答へのお礼

おはやい回答をいただき、本当に感謝しております。
あなたさまのプログラムで試してみたところ、私の期待していたものと違わず動作しました。
重ねて感謝いたしますとともに、URLを参考にもっと深く勉強いたします・・

ありがとうございました!

お礼日時:2010/11/24 05:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!