- ベストアンサー
CSVファイルの重複チェック
- CSVファイルに保存されているメールアドレスの重複チェックについて
- Perl初心者がイベント登録とデータ集計のためにCSVファイルを使用する中で、重複チェックの必要性を感じています。
- CSVファイルのメールアドレスを読み込み、重複をチェックする方法について分かりやすく教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、解決した? 評価中のプログラムはPerlなのかな?Perlでないのなら仕方ないけど。Perlなら、出力したCSVを再度読み込むよりも、評価プログラム自体のデータ変数を解析するのも手だと思うよ。下記は、ファイル'sample.csv'に、一行あたり"<名前>,<メアド>,<質問文>"の順にデータが格納されてる事を前提に話します。rush_2009さんの考えをなるべく素直にあらわしてみました。 ---------- ここから ---------- 01: //===== Initialize ===== 02: %occurrence=(); 03: 04: //===== File open and read loop ===== 05: open FH, "sample.csv"; 06: while( $line = <FH> ) { 07: ($name, $mail, $question) = split /\,/, $line; 08: 09: //===== Check and branch ===== 10: if( exists $occurrence{$mail} ) { 11: print "'$mail' is already exsists.\n"; 12: } 13: else { 14: print "$name,$mail,$question\n"; 15: $occurrence{$mail}=1; 16: } 17: } ---------- ここまで ---------- 学校の宿題程度のスクリプトです。高効率化やデータ再利用などを考えた構成ではありませんが、参考にしてみてください。僕なら、もうちょっと用途に応じたデータベース変数を用意しますが、スクリプトや変数構成はそれだけ複雑になります。実際にプログラムを走らせてないので、つまんないバグがあるかもしれないですが、まあ、許してください。責任感なくて、ごめんね~(笑)。
その他の回答 (5)
- MAGNAFIFTY
- ベストアンサー率69% (9/13)
あいたたた、・・・英語力ですね(笑 Perlのコメントって//だっけ?ブツブツブツ レス不要です。
- Tacosan
- ベストアンサー率23% (3656/15482)
形はあってますが, おしむらくは英語が....>#4. '$mail' is already exists. は英語として間違ってまっせ. '$mail' has already appeared. あたりが適当かと. '$mail' already exists. でも意味は通りそうだけどちょっと変な感じ.
- JavaJavax2
- ベストアンサー率22% (68/305)
>>1-2 ヒント:昔のokwave 回答もしておくか。 こうすればいい。これは シーケンシャルサーチという高度なアルゴリズム sub check{ $flag = 0; $target = 'mail\アットマークmailtest.jp'; $num = $#mail; for($i=0$i<$num;$i++){ if(mail[$i] eq $target){ $flag = 1; } } return $flag; }
お礼
JavaJavax2さま、 早速のご回答有難うございます。 未だよくは分かってはいないのですが、 試してみます。 有難うございます。
補足
JavaJavax2さま、お名前からすると これはJavaスクリプトなのですか? ちょっと思いつきなのですが、登録フォームのメールアドレスの 項目にJavaスクリプトを直接付けてデータベースから全文をみて検索するという方法ないのでしょうか? すみません、素人の思い付きです・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
普通はハッシュでしょうねぇ. defined $counter{$mail_address} でハッシュ %counter のキーに $mail_address があるかどうかわかるので, あれば重複してるしなければ重複していない.
お礼
Tacosanさま、早速のご回答有難うございます。 連想配列の勉強をもう少ししないといけないですね。 有難うございます。
- urakids
- ベストアンサー率77% (7/9)
漠然としていて、よくわからないのですが、 メールだけを抜き出せるなら、 それをハッシュに突っ込みつつ、すでにハッシュに在るかどうかで 重複チェックは出来るんじゃないですね?
補足
urakidsさま、早速のご回答有難うございます。 CSVのデータは 2009/9/10 13:14,80910-13142516,home,page,a,a,男性,1,123-4567,長野県,1,045-123-1234,home1@suv.com,home@suv.com 2009/9/10 13:18,80910-13181011,home,page,a,a,男性,1,123-4567,長野県,1,045-123-1234,home2@suv.com,home@suv.com 2009/9/10 13:30,90910-13303910,home,page,a,a,男性,1,123-4567,長野県,1,045-123-1234,home3@suv.com,home@suv.com こんな感じのデータでそこからメールアドレスを抜き出せば簡単なのかなと考えました、 もう少し勉強してみます。 有難うございます。
お礼
MAGNAFIFTYさま、ご丁寧に有難うございます。 分かりやすい説明でなんとなく分かったのですが・・・ 仰るようにperlで書かれたデータ変数を解析をいましているところです。 またもう少し調べてからお聞きするかもしれませんが、 そのときにお時間の有るようでしたら宜しくお願いします。