電子書籍の厳選無料作品が豊富!

初めて投稿させていただきます、perl初心者です。
イベントの登録とデータ集計がしたくて、色々なメールフォームCGIを
比較検討しております。
今評価中のプログラムはデータをCSVにかき出してくれるのですが、メールアドレスの重複チェックが付いていません、そこでこのプログラムにメールチェック機能を追加したいと考え、色々見て廻ったのですが、良く分かりませんでした、
頭の中では書き出されたCSVファイルを読み込んでメールの列だけ抜き出し、それをチェックすれば良いのかなと考えています。
perlの本やohzakiさんのPerlメモ等も見ましたが良く分かりません。
何方か分かりやすく教えて頂けると助かります。

A 回答 (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:  }
---------- ここまで ----------

学校の宿題程度のスクリプトです。高効率化やデータ再利用などを考えた構成ではありませんが、参考にしてみてください。僕なら、もうちょっと用途に応じたデータベース変数を用意しますが、スクリプトや変数構成はそれだけ複雑になります。実際にプログラムを走らせてないので、つまんないバグがあるかもしれないですが、まあ、許してください。責任感なくて、ごめんね~(笑)。
    • good
    • 0
この回答へのお礼

MAGNAFIFTYさま、ご丁寧に有難うございます。

分かりやすい説明でなんとなく分かったのですが・・・
仰るようにperlで書かれたデータ変数を解析をいましているところです。
またもう少し調べてからお聞きするかもしれませんが、
そのときにお時間の有るようでしたら宜しくお願いします。

お礼日時:2009/09/12 18:52

あいたたた、・・・英語力ですね(笑


Perlのコメントって//だっけ?ブツブツブツ

レス不要です。
    • good
    • 0

形はあってますが, おしむらくは英語が....>#4.


'$mail' is already exists.
は英語として間違ってまっせ.
'$mail' has already appeared.
あたりが適当かと.
'$mail' already exists.
でも意味は通りそうだけどちょっと変な感じ.
    • good
    • 0

>>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さま、お名前からすると
これはJavaスクリプトなのですか?
ちょっと思いつきなのですが、登録フォームのメールアドレスの
項目にJavaスクリプトを直接付けてデータベースから全文をみて検索するという方法ないのでしょうか?
すみません、素人の思い付きです・・・

補足日時:2009/09/12 19:06
    • good
    • 0
この回答へのお礼

JavaJavax2さま、
早速のご回答有難うございます。
未だよくは分かってはいないのですが、
試してみます。
有難うございます。

お礼日時:2009/09/11 23:32

普通はハッシュでしょうねぇ.


defined $counter{$mail_address} でハッシュ %counter のキーに $mail_address があるかどうかわかるので, あれば重複してるしなければ重複していない.
    • good
    • 0
この回答へのお礼

Tacosanさま、早速のご回答有難うございます。
連想配列の勉強をもう少ししないといけないですね。
有難うございます。

お礼日時:2009/09/11 23:18

漠然としていて、よくわからないのですが、


メールだけを抜き出せるなら、
それをハッシュに突っ込みつつ、すでにハッシュに在るかどうかで
重複チェックは出来るんじゃないですね?

この回答への補足

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
こんな感じのデータでそこからメールアドレスを抜き出せば簡単なのかなと考えました、
もう少し勉強してみます。
有難うございます。

補足日時:2009/09/11 22:59
    • good
    • 0

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