![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ハッシュを利用して今ソートできるプログラムを作成したのですが、
重複するデータは除外されてしまうようで、どうしたら除外されずに
ソートできるかを教えていただきたいです。
<例> 文字 よみ No
橋 はし 1
橋 はし 3
箸 はし 2
というデータがあったとして、今のプログラムを実行すると・・・
<結果> 箸 はし 2
キーがよみなので3番目のデータだけ残ります。キーを漢字に
したとしても1番目のデータは残らないのですが、どうしてらよいのでしょうか。
<理想的な結果>
橋 はし 1
箸 はし 2
橋 はし 3
一番いいのが上のような結果で、Excelのソートのような感じで、第1キーはよみで第2キーはNoとかのソートはPerlでできないでしょうかね??
どなたか分かる方がいたら教えていただきたいです。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
$form_file = "sort2.log";
$to_file = "sort2.txt";
open(F1, $form_file) || die "$form_file をオープンできません:$!\n";
open(F2, ">$to_file") || die "$to_file を作成できません:$!\n";
foreach(sort useSort <F1>){
print F2 $_;
}
close(F2);
close(F1);
sub useSort{
(split(/\t/,$a))[1] cmp (split(/\t/,$b))[1] ||
(split(/\t/,$a))[2] <=> (split(/\t/,$b))[2]
}
多分こんな感じになるんじゃないですかね。
<F1>の中身が下のようになっていたらのお話です。
橋\tはし\t2
橋\tはし\t1
橋\tはし\t3
この回答への補足
返事遅くなって申し訳ありません。
プログラムやってみました。上手くソートができていました。
しかし、プログラムがいまいち分からないので、今後の勉強の為にも
もうちょっと詳しく教えていただきたいです。
foreach(sort useSort <F1>){
print F2 $_;
}
close(F2);
close(F1);
sub useSort{
(split(/\t/,$a))[1] cmp (split(/\t/,$b))[1] ||
(split(/\t/,$a))[2] <=> (split(/\t/,$b))[2]
}
の意味を教えていただきたいです。よろしくお願いします。
No.4
- 回答日時:
#3>Noについての
Noは、どのように決定するのでしょうか?
置換前のファイルに手入力で追加するのですか?
現在のような
$mozi{$yomi} = "$mein";
では、同じ読みが1つしか保存されません
$mozi{'はし'}=['橋','箸','端'];
みたいな構造、(位置がNoをあらわす)とするか
$mozi{'はし'}=[['橋',1],['箸',2],['端',3]];
のような構造がいいかもしれません。
ところで、例のように
橋 はし 1
橋 はし 3
みたいに同じ文字、同じ読みで違うNoが付くことはあるんですか
この回答への補足
文字の保存の仕方がいけないのですね・・・。少し考えてみます。
ありがとうございます。
同じ文字でNoが違うバージョンはたくさんあるんですよね。
それがなかったら、簡単にできるんですが。
No.3
- 回答日時:
ハッシュでどんな風にデータが格納されているんでしょうか?
「ソートできるプログラムを作成した」を補足で挙げられますか?
この回答への補足
print"置換元のファイル名を指定ください:";
$form_file = <STDIN>;
print"置換後のファイル名を指定してください:";
$to_file = <STDIN>;
chomp($form_file, $to_file);
open(F1, $form_file) || die "$form_file をオープンできません:$!\n";
open(F2, ">$to_file") || die "$to_file を作成できません:$!\n";
while ($line = <F1>) {
chomp $line;
($mein, $yomi) = split (/\t/, $line);
$mozi{$yomi} = "$mein";
}
foreach $value (sort keys %mozi) {
print F2 "$mozi{$value}\t$value\n";
}
作成してみたのが、これです。
まだNoについてのプログラムはわからないので作成できていませんが・・
できますかね??よろしくお願いします
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?5a7ff87)
No.2
- 回答日時:
#!/usr/local/bin/perl
use strict;
my @DATA = (
[ '橋', 'はし', 1 ],
[ '橋', 'はし', 3 ],
[ '箸', 'はし', 2 ],
);
@DATA = sort { $a->[2] <=> $b->[2] } sort { $a->[1] cmp $b->[1] } @DATA;
for (@DATA) {
print $_->[0] . $_->[1] . $_->[2] . "\n";
}
exit;
検証していませんので自信はないです:)
No.1
- 回答日時:
がると申します。
んっと……記述されているデータだけを考えると単純に「Noをキーにしてソート」で片付くと思うのですが。
もし「それじゃNG」なようであれば、もう少し細かく「ソート条件」を教えていただければ、多分返答できるかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlのソートについて
-
Accessのマクロでモジュールを...
-
キャッシュを使わずにSELECTを...
-
エクセルVBAでUserFormを起動し...
-
ドメインの取得日を変更する方法
-
WHERE句の実行順序
-
PL/SQLでのSQL文法
-
ODBCリンクの際にACCESSでは読...
-
callで順に実行されるプロシー...
-
DB2のSELECTでカンマ編集につい...
-
異なるスキーマのビューを元に...
-
SELECT結果の縦と横の入れ替え
-
ALTER SESSIONについて
-
或るプロシージャの呼び出し元判定
-
TeXの索引作成に関して
-
Oracle10gのsql分についての質...
-
Transact-SQLでストアードプロ...
-
Accessでグローバル変数を宣言...
-
Statement ignored というエラー
-
ExcelのSUMPRODUCTで日付の範囲...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access adoのトランザクション
-
ExecuteSQLについて
-
gitでコミットするタイミングが...
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
Statement ignored というエラー
-
ODBCリンクの際にACCESSでは読...
-
sqlplusでヘッダーが付かない
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
likeとsubstrの使いわけについて
-
callで順に実行されるプロシー...
-
キャッシュを使わずにSELECTを...
-
VBA プロシージャの名前の取得
-
【Excel VBA】 WorksheetやRa...
-
PL/SQLカーソルの2重FORループ...
-
全角空白のTRIMができない...
-
SQLサーバで和暦から西暦に変換...
おすすめ情報