ついこの間正規表現のことで質問させていただいたものです なんとか問題は解決しました
それとは別にソート関連での質問があります
正規表現の前にソートについて質問してご回答を頂いてからそれを参考に試してみました
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1882190
です
push で@tmpの内容を
($score,$filename,$title,$sentenceの順番に)
3.5 abc.txt あいうえお aaaaa
4.6 def.txt かきくけこ bbbbb
2.8 ghi.txt さしすせそ ccccc
5.1 jkl.txt たちつてと ddddd
という風にしました
このリストを
@tmp = map {$_->[0]} sort {$a->[0] <=> $b->[0]} map {[$_, split /<>/]}@tmp;
としたんですが結果は
abc.txt あいうえお aaaaa
def.txt かきくけこ bbbbb
ghi.txt さしすせそ ccccc
jkl.txt たちつてと ddddd
3.5 4.6 2.8 5.1
というふうになってしまいます
これを
スコア順に
5.1 jkl.txt たちつてと ddddd
4.6 def.txt かきくけこ bbbbb
3.5 abc.txt あいうえお aaaaa
2.8 ghi.txt さしすせそ ccccc
としたいのですがうえのソースでは何がいけないんでしょうか??
No.3ベストアンサー
- 回答日時:
以下のスクリプトが私が試した内容です。
比較してみて下さい。my @tmp;
while (<DATA>) {
push @tmp, $_;
}
@tmp = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, split /<>/]}@tmp;
print @tmp;
__END__
3.5<>abc.txt<>あいうえお<>aaaaa
4.6<>def.txt<>かきくけこ<>bbbbb
2.8<>ghi.txt<>さしすせそ<>ccccc
5.1<>jkl.txt<>たちつてと<>ddddd
No.8
- 回答日時:
ソート処理のコードには間違いがないのですから、その入力@tmpを疑うべきではないでしょうか。
@tmpがどうなっているか単純にprint '@tmp: ', "\n@tmp\n";みたいなのを入れてみてチェックしてみたら解決につながると思います。# 別の処理をしてからこのソート処理をするのであれば、別の処理はソート処理の入力に相応しい形式で出力させる必要があります
# ソート処理後に別の処理で変更されている可能性もあります
# No.1の説明で理解できないのであれば、No.6の方のようなコードの方が理解した上で改変できていいのではないでしょうか
No.6の方のやり方はハッシュを使っていますが、そのキーとして数値を使うのは問題だと思います (数値は異なるレコードで重複する場合があり得ると思うので)。もしこのように数値を@scoreとして取り出しているのであれば、%all_hなどは必要なく単純に
for(sort {$score[$b] <=> $score[$a]} 0..$#score) {
print $data[$_]; # @dataと@tmpは同じもの
}
のようにすればいいのではないでしょうか。つまり、No.3と同様のコードを示すと、
my @tmp;
my @score;
while (<DATA>) {
push @tmp, $_;
push @score, (split /<>/)[0];
}
for (sort {$score[$b] <=> $score[$a]} 0..$#score) {
print $tmp[$_];
}
__END__
3.5<>abc.txt<>あいうえお<>aaaaa
4.6<>def.txt<>かきくけこ<>bbbbb
2.8<>ghi.txt<>さしすせそ<>ccccc
5.1<>jkl.txt<>たちつてと<>ddddd
ご回答してくださった方々ありがとうございました
完全に問題が解決したわけではありませんが
ソートだけのスクリプトだけを作成し実行したら上手く動作したので
あとはこれを応用して問題を解決したいと思います
本当にありがとうございました
No.7
- 回答日時:
既に No.3 で答えは出ています。
あなたの質問に書いた処理と No.3 の処理は違います。(sortの対象が違います)。
よく読んで下さい。
この回答への補足
0と1がちがうんですよね??
sort をインデックス 1 に書き換えました
ソート処理だけのスクリプトを作成し実行させるとうまくいきました
しかしこれを別のスクリプトと組み合わせて使うと一行目にまとまってしまいます
{$b->[1] <=> $a->[1]}
とすると一行目にスコアがまとまり
{$a->[1] <=> $b->[1]}
とすると最後の行にまとまってしまいます
No.6
- 回答日時:
素人考えですが、こんなんどうでしょう。
ご希望の結果にはなると思います。@data=qw/3.5,abc.txt,あいうえお,aaaaa 4.6,def.txt,かきくけこ,bbbbb 2.8,ghi.txt,さしすせそ,ccccc 5.1,jkl.txt,たちつてと,ddddd/;
foreach(@data){
/^([\d|.]+?),/mg;
push @score,$1;
}
$score_n = @score;
for ($i=0;$i<$score_n;$i++){
$all_h{$score[$i]}=$data[$i];
}
for(sort { $b <=> $a } keys %all_h){
print "$all_h{$_}\n";
}
ちなみにリファレンスと無名配列による多次元配列は以下のサイトがわかりやすいかと。
参考URL:http://takenaka-akio.cool.ne.jp/doc/perl_kiso/re …
No.4
- 回答日時:
・・・もしかして @tmp の中身、
my @tmp = (
3.5, "abc.txt", "あいうえお", "aaaaa\n",
4.6, "def.txt", "かきくけこ", "bbbbb\n",
2.8, "ghi.txt", "さしすせそ", "ccccc\n",
5.1, "jkl.txt", "たちつてと", "ddddd\n",
);
みたいになってたりしませんか?
#そうだったにしても1行目の 3.5 4.6 2.8 5.1 は謎ですが。
No.2
- 回答日時:
No.1です。
先ほどのお話は3.5 abc.txt あいうえお aaaaa
は
3.5<>abc.txt<>あいうえお<>aaaaa
の打ち間違えで、
$tmp[0] が 3.5<>abc.txt<>あいうえお<>aaaaa
であると仮定しています。
この回答への補足
0を1に変えてためしてみたところ
3.5 4.6 2.8 5.1
5.1 4.6 3.5 2.8 abc.txt あいうえお aaaaa
def.txt かきくけこ bbbbb
ghi.txt さしすせそ ccccc
jkl.txt たちつてと ddddd
のような感じになってしまいました
結構多くのサイトを見てみたんですけどどこも教えていただいたソースコードでちゃんと出来ているみたいです
となると何がいけないんでしょうか??普通にソースコードを書いてアップロードしてるだけなのですが…
No.1
- 回答日時:
@tmp = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, split /<>/]}@tmp;
です。
[$_, split /<>/]
で、無名配列に
0 のところに 3.5 abc.txt あいうえお aaaaa
1 のところに 3.5
2 のところに abc.txt
3 のところに あいうえお
4 のところに aaaaa
が入ります。
ですから sort はインデックス 1 の部分を使います。
それと昇順降順が逆ですので、
{$b->[1] <=> $a->[1]}
となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- その他(プログラミング・Web制作) Pythonの質問です テキストファイルをこのように自動生成したいのですがどうすれば良いでしょうか. 2 2022/08/25 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- ライブ・コンサート・クラブ TXT のライブって倍率かなり高いですか? 邦楽のアーティストと比べたら? ジャニーズと比べたら? 1 2023/03/01 07:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DOSコマンドのダブルクォーテー...
-
C# Process.Startメソッドで複...
-
C# 特定文字列まで削除の方法
-
Androidアルバムの画像を消去で...
-
ひとつのファイルを一括で複数...
-
拡張子はなぜ、大文字と小文字...
-
フォルダの並び替えの項目を固...
-
エクセルでの計算式もしくはシ...
-
Windowsフォルダ内のファイルと...
-
複数のフォルダへ同時にファイ...
-
XCOPYでネットワーク越しにコピ...
-
XCOPYで指定したフォルダとファ...
-
突然写真とかjpegファイルがみ...
-
softonicという物をダウンロー...
-
Windows10 で登録した外字を他...
-
6ヶ月経過日を算出する式
-
デスクトップ白色アイコン名の...
-
タスクバー上でのフォルダ名の表示
-
batファイルで、call使っても戻...
-
ドナルドウズを消す。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# Process.Startメソッドで複...
-
cshで拡張子を除いたファイル名...
-
DOSコマンドのダブルクォーテー...
-
C# 特定文字列まで削除の方法
-
リストボックスのテキストを保存
-
API FtpPutFileの戻り値
-
VBからファイル・アプリケーシ...
-
sort の極意
-
複数のテキストファイルを結合...
-
findstrで複数ファイルを検索す...
-
powershellでのソート
-
ソート処理
-
ファイル処理でのファイル指定...
-
Powershell で []付ファイル名...
-
Androidアルバムの画像を消去で...
-
拡張子はなぜ、大文字と小文字...
-
ひとつのファイルを一括で複数...
-
フォルダの並び替えの項目を固...
-
フォルダの中に1個しかファイ...
-
複数のフォルダへ同時にファイ...
おすすめ情報