アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある書込ファイルでの重複した場合の処理・・・

~text.txt~
1490747427,あ,あ,あ,SrZqgZAs,1234
1490747417,あ,あ,あ,SrZqgZAs,1234
1490747071,7,7,7,SrZqgZAs,777
1490747041,6,6,6,SrZqgZAs,1234
1490747025,5,5,5,SrZqgZAs,1234

(左から「time,name,title,text,id,password」の順で並んでいます。)

今回、教えていただきたいことが、

次に入力する値が

name = あ
id = SrZqgZAs

だった場合に、text.txtに
すでに入力する値が、2回あるため
入力できないようにしたいのです。

そこで、
text.txt内にある
name(あ) と id(SrZqgZAs) の個数を数える
方法をご教示お願い致します。

※()内のnemeは
my $NAME = $form->param('name');
と、CGI.pmで受け取った値

idは
$ID = (※IPアドレスと時間による自動整正したソース)

A 回答 (3件)

以下のようになります。


----------------------------
my $datafile="text.txt";
my $name = "あ";
my $id = "SrZqgZAs";
my $name_ctr = 0;
my $id_ctr = 0;
open(FH, $datafile);
while(<FH>){
chomp($_);
my ($time0,$name0,$title0,$text0,$id0,$pass0) = split(/,/,$_);
if ($name eq $name0){ $name_ctr++; }
if ($id eq $id0){ $id_ctr++; }
}
close(FH);
print "name_ctr=$name_ctr\n";
print "id_ctr=$id_ctr\n";
------------------------------------
以下、実行結果です。
name_ctr=2
id_ctr=5
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

解決しました。

昨日、同じ手法で試してたのですが、なぜか上手くいかず
今日、試したら上手くいきました。

インターネットオプションの閲覧の履歴を削除することにより解決しました。

お礼日時:2017/03/30 16:10

あなたはすでに「特定の列に特定のデータが入っているかどうかを調べる方法」を知っているはずです. 「列の指定」はそれをちょっと流用す

るだけ.
    • good
    • 0
この回答へのお礼

はい・・・申し訳ないです;;
以前にも、似たような質問で、そこを応用すれば済む話ですよね;;


今回はgrepではないのですが、
No2様と同じ手法で、昨日実行し、上手く行かず
今日、インターネットオプションの閲覧履歴の削除など
をすると
旨いこといきました。

ありがとうございました。

お礼日時:2017/03/30 16:14

grep

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

grepで

$FILE = 'log.txt';
$name = "あ";

open(FILE, "<$FILE") or die("error :$!");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;

$c = 0;
my @TEST = grep { $DATA[$_] =~ /$name/ } 0..$#DATA;
$c = scalar @TEST;

print $c;

ここまではできているのですが、
これだと、結果は「6」
となってしまい、
列の指定がどのようにするのかわからないです・・・

お礼日時:2017/03/29 16:58

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