![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Perlに詳しい方教えてください。
WinXP(SP3)+ActivePerl-5.10.0.1004の環境で、重複データのチェックプログラムを
作成していますが、foreach文の挙動がよく分かりませんので教えてください。
※Perlは独学です。
<入力ファイル>
あいうえお
あいうえお
かきくけこ
あいうえお
<出力期待値その1>
あいうえお,重複しています
あいうえお,重複しています
かきくけこ
あいうえお,重複しています
<出力期待値その2>
あいうえお,重複しています
あいうえお,重複しています
かきくけこ
あいうえお
<プログラムの要約>
open(IN,$input_file); # 入力ファイルを読み込み
@BASE = <IN>;
close(IN);
@BASE_2 = @BASE ; # 配列のコピーを作成
$count_1 = '0' ;
foreach $data_1 (@BASE) {
$count_1++ ; # 何行目を処理しているかのカウンター
$flag_1 = '0' ; # フラグの初期化
$count_2 = '0' ;
foreach $data_2 (@BASE) { # ←★ここの記述方法の質問です★
$count_2++ ;
if ( $count_1 == $count_2 ) { next; } # 自分自身の行とは比較しない
if ( $data_1 eq $data_2 ) { $flag_1 = '1' ; } # 一致したらフラグを立てる
}
if ( $flag_1 == '0' ) { # フラグが立たなかったらそのまま新しい配列へ追加
push(@kekka,$data_1);
} else { # フラグが立ったらコメントを追加して新しい配列へ
$data_1 =~ s/\n//g;
$data_3 = $data_1 . ",重複しています\n" ;
push(@kekka,$data_3);
}
}
$kekka_2 = join("",@kekka) ; # 配列のデリミタ対策
open(OUT,"> $output_file");
print OUT "$kekka_2";
close(OUT);
exit;
<質問>
上記プログラムの★マークの箇所で、
foreach $data_2 (@BASE_2) としますと、<出力期待値その1>が得られます
そして、
foreach $data_2 (@BASE) としますと、<出力期待値その2>が得られます
プログラムの途中で @BASE_2 = @BASE としていますので、一見しますと
同じ処理をしているように感じるのですけれども、実際には出力結果が異なり
ますので、何かが違うのだと思います。
その違いを教えて戴きたいです。
※投稿確認画面でTABが消えてしまいますのでTABは全角スペースに変更して
おります。
見えづらい場合には申し訳ありません
No.1ベストアンサー
- 回答日時:
foreach文はオリジナルを置き換えますので注意して使ってください。
>$data_1 =~ s/\n//g;
# オリジナル(@BASE)の対象データが書き換えられる。
ありがとうございます
最初は
あいうえお<改行コード>
あいうえお<改行コード>
かきくけこ<改行コード>
あいうえお<改行コード>
でしたけれども、foreachの最後では
あいうえお
あいうえお
かきくけこ<改行コード>
あいうえお<改行コード>
となっていて、どのデータとも重複しないのですね
難しいです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列の中に重複文字列があるか...
-
csvで順番の入れ替え
-
Perlでのforeach文の挙動がわか...
-
window.open でのファイル指定方法
-
VBAでCSVファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
awkスクリプトでダブルクォーテ...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
htaccessで特定のディレクトリ...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
-
エクセルVBAで素数だけを出力す...
-
fgets で値が取得できない
-
エクセルVBA コードが同じでも...
-
DOSコマンドで、標準出力を出力...
-
MATLABのm-fileについて
-
openした後、closeしないでプロ...
-
Perlで特定行から特定行までを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どのようなプログラムをつくれ...
-
csvで順番の入れ替え
-
perlでの三次元配列の作り方
-
配列の中に重複文字列があるか...
-
要素を削除する最適な方法
-
perlで複数行のデータを自由に...
-
pushをすると行ができる
-
ファイルから読み込んで配列へ
-
Perlの初歩的な質問・・・
-
行・列の整理! perl
-
C言語のバイナリモードでのfsca...
-
perl-cgi 文字の長さでソートし...
-
C言語でバイナリファイルの読み...
-
Pythonの再帰関数の動作の流れ...
-
CSVデータ「","」と「,」混在読...
-
perlで読み込んだURLを配列に入...
-
perlの無名配列の使い方を教え...
-
ソートのテクニックについて
-
ランダムでかぶらないように4...
-
頻度表の作成(Perl初心者です)
おすすめ情報