並び替えた順に番号を付けるには?
[上に]
[前に]
[次に]
hiboo
[E-Mail]
[HomePage]
2000/03/28(火) 11:56:52
以前同様の質問をさせて頂いたのですが、
私の質問の仕方がまずかったせいか、
適当な回答を頂けなかったので、
改めて内容を整理し質問させて頂きます。
質問内容
任意のデータファイルからprint map(Schwartzian Transformというらしい)
のスクリプトを使い並び替えて表示させ、かつ順に番号を付けたいのです。
A の並び替えまではできるだが、Bのように番号が上手くつけられません。
尚、最終的には上記HPのように応用したいと考えておりますので、合わせて御参照下さい。
御教示の程宜しくお願い致します。
@もともとのデータファイル内の情報
A,赤,3
B,黒,5
C,白,1
D,青,6
A並び替え結果(3項を昇順)
C,白,1
B,黒,5
A,赤,3
D,青,6
B順に番号を付ける
1,C,白,1
2,B,黒,5
3,A,赤,3
4,D,青,6
当該部のスクリプトだけ抜き出してみました。
@r=<IN>;
close(IN);
print map {"$_->[0]<BR>"}
sort {$a->[3] <=> $b->[3]}
map {[$_,split(/,/)]} @r;
exit;
a
2000/03/28(火) 12:47:47
まちがっていませんか。
A並び替え結果(3項を昇順)
C,白,1
B,黒,5
A,赤,3
D,青,6
は
C,白,1
A,赤,3
B,黒,5
D,青,6
???
hiboo
2000/03/28(火) 15:00:22
御指摘の通り間違いです。
失礼しました。
にゃあ
2000/03/31(金) 00:18:16
はーい、こういう時は、ロジックを見なおしてみるといいと思います。
ファイルからデータを入力する→配列に入っている
のならば、その配列に今のデータを追加してやる。
それをソートする。
for文を使って、その配列の中で、入力されたデータと
同じ物を探す。見つかればそれが『何番目として入力されたか』
がわかりますね。
そしてfor文を使ってその配列を1行ずつ出力してやれば……
というふうにすればうまく行くと思います。
PS。EOFは『End of File』なので別の文字列にしましょう。
[上に]
[前に]
[次に]