dポイントプレゼントキャンペーン実施中!

perlでのCSVデータの並べ替えで質問があります。

0001 東京都
0002 千葉県
0003 埼玉県
0004 栃木県

という順番で保存されているcsvファイルの順番を

0001 東京都
0004 栃木県
0002 千葉県
0003 埼玉県

というように替える方法が知りたいのです。
ご存じの方がいらしたらよろしくお願いします。

A 回答 (3件)

既に回答されている通り、並び替えの規則を明確にしてソートするだけだと思います。



基本的に整数番号を数値として扱って小さい順に並べるとして、栃木県を特別扱いするとすれば、栃木県の数値を適当な小数に置き換えてソートすればいいのではないでしょうか。下のコードは適切な書き方なのか自信ないですが、参考になれば。


my @indx = ('0003', '0001', '0004', '0002');
my @pref = ('埼玉県', '東京都', '栃木県', '千葉県');

my @sorted = sort sort_tochigi 0..$#pref;
for (@sorted) { print $indx[$_], ': ', $pref[$_], "\n" }

sub sort_tochigi {
my $cmp = ($pref[$a] eq '栃木県' ? 1.5 : $indx[$a]) <=> ($pref[$b] eq '栃木県' ? 1.5 : $indx[$b]);
return $cmp;
}
    • good
    • 0
この回答へのお礼

書き方がまずかったと反省してますが、基本的には指定されたCSVデータを一行上に移動(入れ替え)したり、一行下に移動したりという事がしたかったのです。

ご回答くださったコードの方も参考にさせていただきます。
ありがとうございます。

お礼日時:2007/04/13 09:21

そもそも「どのようなデータ構造を使っていて」「どのような順番にしたいのか」がわからないと答えようもないだけど, 例えば


@data: データの配列
@order: $i 番目に出力したいデータは $data[$order[$i]]
となっていれば
print @data[@order];
でもいいかもしれない.
あとは, 例えば
for my $key (@item) {
print $data{$key};
}
みたいにハッシュと for を組合せるとか.
    • good
    • 0
この回答へのお礼

うーん、なるほど、参考になりそうです。
ありがとうございます。

お礼日時:2007/04/13 09:19

並び替えの規則が書かれていない。



読み方順で並び替えたいのであれば読み仮名を追加しなければならない(漢字は複数の読みが存在するから)
あるいは都道府県による読み仮名辞書(のデータベース)を別途用意する必要がある。
    • good
    • 0
この回答へのお礼

法則はないです。

表記のように東京都・千葉・埼玉・栃木の順に保存されていて、ある理由により東京の次に栃木がくるようにしたい、とか、今回は東京を一番下にしたい、とかそのように使いたいのです。

ソートではないので、やり方がわからず困っています。

お礼日時:2007/04/12 14:57

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