- ベストアンサー
複数行を順番通りに並べたい - Perlを使用した方法
- perlを使い、複数行に渡る情報をdatファイルから読み込み、<form>~</form>を含むhtmlの表示順を<select>~</select>で指定する方法について紹介します。
- 並び順番の指定の数字が被ってしまった場合の対処方法として、再度降順に数字を書き直す手順についても説明します。
- また、並び順番の数字が被った場合にエラーメッセージを表示させ、再入力させる方法についても考察します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いまひとつ、おっしゃっていることがわからないんですが ○ 番号順に並び変えるのは出来ている、ということでよろしいですか? ○ どんなデータ構造で記憶しているかがわかりませんが $data[0] = '1(ID)<>1(並び順番)<>…' ; $data[1] = '2<>2<>…' ; ... みたいなリスト構造だったら、並び変えたあと、「並び順番」のデータをそのまま使うのではなく。添字($data[0]の0,$data [1]の1)+1を使えばいいし foreach $d (@data) みたいに使っているなら $no=1; foreach $d (@data) { ... ; $no++ ; } のようにした$noを使えばいいです(#1にあるカウンタです) ○ 重複がある ⇔ ($i != $j) かつ ($data[$i]の『並び順番』 == $data[$i+1]の『並び順番』) となる ($i ,$j) (0<=$i,$j<データ数)の組合せが存在する ⇔『並び順番』でソートした状態で、 ($data[$i]の『並び順番』 == $data[$i+1]の『並び順番』) となる $i (0<=$i<データ数-1)が存在する です。 効率を考えなければ、総当たりするだけの簡単なプログラムです。
その他の回答 (2)
- myuki1232
- ベストアンサー率57% (97/170)
質問の内容は、例えば my @array = ([3, 1], [2, 5], [1, 1], [4, 2], [5, 5]); my @result = sort { $a->[1] <=> $b->[1] } @array; ↓ 3, 1 1, 1 4, 2 2, 5 5, 5 を 3, 1 1, 2 4, 3 2, 4 5, 5 に変換したい、という意味で合っていますか? そうであれば単純に foreach my $i (0 .. $#result) { $result[$i][1] = $i + 1; } で変換できます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「降順に1・2・3・4・5~と数字を書き直す」が意味不明なんだが, カウンター使えばいいだけ, では?
お礼
解りにくくて申し訳ありません。 カウンターというものについて調べてみます。
お礼
有難うございました。 採番し直す方はやはり難しかったので、重複がある場合エラーメッセージを出す方向で参考にさせていただき、成功致しました。