dポイントプレゼントキャンペーン実施中!

お世話になります。
次のようなテキストファイルを読み込んで重複を探し、表示したいのですが、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,重複

宜しくお願いします。

A 回答 (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__
    • good
    • 0
この回答へのお礼

すみませんm(-_-;)m 解説ありがとうございます。
実は

>while(<DATA>){#実際は、ファイルハンドル(か<>)になるべき所、DATAにしておくと、__END__から読み込める

既にここから知りませんでした。オイなんで__END__から下のデータが読み込まれるんだ!

という感じです。
よくよくコメントを読みながら勉強します。
重ねてありがとうございました。

お礼日時:2005/06/20 23:36

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
    • good
    • 0
この回答へのお礼

でっ・・・できた!あんなに悩んでいたのに、いとも簡単に作ってしまいはった!
といっても、コードの意味がわからん!
まずはありがとうございます。

だっだれかこのコードの意味を解説してください!おねがいします。(なんとのぉ~、うすぼんやりとはわかります)

お礼日時:2005/06/20 09:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!