お世話になります。
次のようなテキストファイルを読み込んで重複を探し、表示したいのですが、Perlで、どのようなコードを書けば良いのでしょう。
尚、重複チェックは2通りあります。
パターン1 例えば1,2が2回以上出現する
パターン2 1,2と2,1や2,3と3,2は重複とみなす。
テキストファイル
1,2
1,3
1,4
1,5
2,1
2,3
2,4
2,5
3,1
3,2
1,2
チェック後の表示
1,2,重複
1,3,重複
1,4,
1,5,
2,1,重複
2,3,重複
2,4,
2,5,
3,1,重複
3,2,重複
1,2,重複
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
解説:
while(<DATA>){#実際は、ファイルハンドル(か<>)になるべき所、DATAにしておくと、__END__から読み込める、この場合は、別にテキストファイルを作るのがめんどくさかったからと、これだけで実行(追試)ができるという意味
chomp;#末尾の改行を切り捨てる、引数が無い時は$_現在の読み込み行に対して実行される
$data[$i++]=$_;#現在の行を、あとで元データとして利用するために配列に入れておく
$test{$_}++;#既にあったかどうかテストするために行データをキーにハッシュにしておく、値は、出現回数
($a, $b)=split ",";#今読み込んでる行を「,」で分離する
$test{"$b,$a"}++;#逆順の並びでハッシュに登録
}
foreach $x (@data){#元のデータを順に取り出す
print "$x";#オリジナルの表示
print ",重複" if($test{$x}>1);#ハッシュで、2回以上カウントされていたら重複しているって表示する
print "\n";#改行をつけて一行分処理終わり
}
__END__
すみませんm(-_-;)m 解説ありがとうございます。
実は
>while(<DATA>){#実際は、ファイルハンドル(か<>)になるべき所、DATAにしておくと、__END__から読み込める
既にここから知りませんでした。オイなんで__END__から下のデータが読み込まれるんだ!
という感じです。
よくよくコメントを読みながら勉強します。
重ねてありがとうございました。
No.1
- 回答日時:
while(<DATA>){
chomp;
$data[$i++]=$_;
$test{$_}++;
($a, $b)=split ",";
$test{"$b,$a"}++;
}
foreach $x (@data){
print "$x";
print ",重複" if($test{$x}>1);
print "\n";
}
__END__
1,2
1,3
1,4
1,5
2,1
2,3
2,4
2,5
3,1
3,2
1,2
でっ・・・できた!あんなに悩んでいたのに、いとも簡単に作ってしまいはった!
といっても、コードの意味がわからん!
まずはありがとうございます。
だっだれかこのコードの意味を解説してください!おねがいします。(なんとのぉ~、うすぼんやりとはわかります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) 重複データの抽出について 2 2023/07/21 14:52
- Visual Basic(VBA) ListView重複データ削除 2 2022/08/05 18:12
- その他(クラウドサービス・オンラインストレージ) Googleスプレッドシートについて 1 2022/05/11 15:26
- その他(プログラミング・Web制作) VBSでExcelファイル起動時、重複しても開くのを止めたい 1 2022/10/01 23:20
- Excel(エクセル) Excelで連続して重複する行数の違う列を参照する方法 5 2023/04/23 06:15
- Excel(エクセル) 表に書いてある単語を1つの行に重複させないで書き出したい。 複数の列行にそれぞれ職種が入力されている 6 2022/05/25 04:49
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Excel(エクセル) Excel2019 列と列(2列)の数値の重複を調べたい 1 2023/05/11 13:35
- Excel(エクセル) 同じセルで重複している文字を削除したい 3 2022/11/15 12:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
列挙型と連想配列の違いを教え...
-
ハッシュ検索はなぜ速い
-
ハッシュのハッシュを実現したい。
-
mapのポインタ
-
変数が大量にありすぎて美しく...
-
まったく同じファイルのハッシ...
-
ハッシュ値によるファイルの同...
-
チェックデジットについて
-
perlで配列名を動的に作り出したい
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
ListBox 複数選択 で オートフ...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
VBAのautofilter、criteriaの配...
-
再帰関数のインライン展開
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
乱数の桁数指定、または範囲指定。
-
Excel VBA ユーザーフォームの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
チェックデジットについて
-
ハッシュのハッシュを実現したい。
-
まったく同じファイルのハッシ...
-
列挙型と連想配列の違いを教え...
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
短いハッシュの作り方
-
英語でのシャープとコメの呼び...
-
Perlは戻り値で、ハッシュや配...
-
ハッシュマーク以降のアドレス取得
-
一意(ユニーク)かつ、ソート...
-
ハッシュリストって単にハッシ...
-
ActivePerl がハングアップ
-
Perlのハッシュ変数のソートに...
-
文字数の短いユニークなID生成
-
Perlでファイルを読み込み...
-
mapのポインタ
-
Perlのサブルーチンの引数に配...
おすすめ情報