トップページphp
1001コメント327KB

CGIだけど、なんか質問ある?Part 5

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。01/12/26 10:51ID:???
■過去ログ
 Part 3 http://pc.2ch.net/test/read.cgi/php/988727833/l50
 Part 4 http://pc.2ch.net/test/read.cgi/php/1000804655/l50

その他参考になるスレッドを >>2 に纏めたので、十分に調べた上で質問して下さい。
0894名無しさん@お腹いっぱい。02/02/27 15:07ID:uzDDNMO0
ログの形式:<>で区切ってます。
$x1が親記事の番号で$x2が返信記事の番号です。
行の最後に採点のためのデータを6つ追加しました。
$xjが合計点で、$xe〜$xiまでが各採点の数。

-------■ログの形式■---------
130<>1<>名前<>タイトル<><><>親記事のコメント<>#ff6633<><><>02/02/26(Tue)02:29<>0.XuCN0FGrIKQ<>1014702931<>0<>0<>0<>0<>0<>0<>
(130)<>1<>名前<>タイトル<><><>親記事への返信のコメント<>#ff6633<><><>02/02/26(Tue)02:29<>0.XuCN0FGrIKQ<>1014702931<>0<>0<>0<>0<>0<>0<>
-------■ログの形式■---------
0895名無しさん@お腹いっぱい。02/02/27 15:08ID:uzDDNMO0
-------■受け取り側■---------
ログから全記事を@all_linesに読み込む。
while (($key, $value) = each %in){
if( $key =~ /^%28\d+%29-\d/ ){
$key =~ s/^%28(\d+)%29-(\d+)/$1,$2/ ;
foreach (@all_lines) {
if( /^\($1\)<>$2/ ){
my($x1,$x2,$x3,$x4,$x5,$x6,$x7,$x8,$x9,$xa,$xb,$xc,$xd,$xe,$xf,$xg,$xh,$xi,$xj)=split(/<->/);
if($value == 5){ $xe = $xe+1 ;}
elsif($value == 4){ $xf = $xf + 1;}
elsif($value == 3){ $xg = $xg +1;}
elsif($value == 2){ $xh = $xh +1;}
elsif($value == 1){ $xi = $xi +1;}
else{ エラー処理;}
$xj = ($xe * 5) + ($xf * 4) + ($xg * 3) + ($xh * 2) + ($xi * 1);
push(@new, "$x1<>$x2<>$x3<>$x4<>$x5<>$x6<>$x7<>$x8<>$x9<>$xa<>$xb<>$xc<>$xd<>$xe<>$xf<>$xg<>$xh<>$xi<>$xj<>\n");
}else { push(@new, $_ );}
}
$#all_lines = -1 ; #これは必要?
@all_lines = @new ;
$#new = -1 ;
}
}

@all_linesをファイルに書き込む。
-------■受け取り側■---------
0896名無しさん@お腹いっぱい。02/02/27 15:08ID:uzDDNMO0
受け取り側がすごく間抜けなコーディングですが、
もっとスマートな方法はないものでしょうか?
さらにバグがあるようです。たまに採点した以上に採点の数が増えます。
0897名無しさん@お腹いっぱい。02/02/27 15:09ID:???
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0898名無しさん@お腹いっぱい。02/02/27 15:14ID:uzDDNMO0
>>897
すみません。書き直します。
0899名無しさん@お腹いっぱい。02/02/27 16:08ID:uzDDNMO0
perlでランキングするにはどうすればいいですか?

連続でなく(1,2,3,4,5....)
同点場合は同じ順位になるやつです。(1,2,2,2,5,6,7)
0900名無しさん@お腹いっぱい。02/02/27 16:11ID:???
>>899
同一順位の奴リストで記憶して一気書き。
0901名無しさん@お腹いっぱい。02/02/27 17:02ID:s1a46wqm
先生!以下の文章を短縮する手だてはないものでしょうか。
if ($hoge eq '001_001' || $hode eq '001_002' || $hode eq '001_003'、、、、|| $hode eq '001_050') { print "001グループです。。。"; }

10進法で
$hogeが'001_001'、'001_002'、〜(中略)〜、'001_050'の時に、"001グループです。。。"をprintしたいのですが。。。
テキストエディタの左右のスクロールバーが大変です!(;´Д`)
0902名無しさん@お腹いっぱい。02/02/27 17:05ID:???
if ($hoge =~ /^001_0\d\d$/) { print "001グループです。。。"; }
00や51〜99も入っちゃうけどな。
それを除外する方法は自分で調べて。
0903名無しさん@お腹いっぱい。02/02/27 17:25ID:???
>>901
$hoge =~ /0(\d\d)_0(\d\d)/;
print "グループ1" if ($1 == 0 and $2 >=1 $2 <= 50 );

動作確認してないけど。

0904名無しさん@お腹いっぱい。02/02/27 17:29ID:???
>903
$1 == 1
にしておかないと、グループ0になりますぜ?
090590102/02/27 19:21ID:???
先生方!レスありがとうございます。
902さんの
if ($hoge =~ /^001_0\d\d$/) { print "001グループです。。。"; }
これで一応問題がないかのように(;´Д`)動作しておりますが、このまま使い続けちゃマズイですか?
もちろん51〜99なんて存在しないです。。。

903さんの文章は今のおいらじゃ理解できないみたいです。。
もうちょっと経験値をためてレヴェルうpしてから、改めて読み直すことにします
0906名無しさん@お腹いっぱい。02/02/27 19:56ID:???
>>901
っつーか、根本的にもっと綺麗にデータ処理をしようと思わないのだろうか。
0907名無しさん@お腹いっぱい。02/02/27 20:42ID:uzDDNMO0
ロックファイルの処理がうまくいっているか試す方法ってあります?
自分で同時に書き込むってできないし。
#ローカルサーバ立ち上げてます。
0908名無しさん@お腹いっぱい。02/02/27 20:47ID:???
>>907
漏れの場合、ロックしたままランダムな時間 sleep() 。
でも、もっとうまい方法があるような気が。
0909名無しさん@お腹いっぱい。02/02/27 21:33ID:???
>>907

1.ロック解除ルーチンをコメントアウトして実行。
ロックがかかっているか確認。

2.そのプログラムをもう一度実行。
六句により書き込めないことを確認。

3.コメントアウトした部分とロックを元に戻し実行。
書き込めればロックは作動している。

サーバ立てるのはいいがOS位書いてほしかった。
0910名無しさん@お腹いっぱい。02/02/27 22:02ID:uzDDNMO0
>>907
ありがとうございます。
サーバはLinuxです。
0911名無しさん@お腹いっぱい。02/02/27 22:34ID:TYQQ82Xg
Perl で、一旦、
Helloを表示して、3秒くらいの処理行ったあとその出力を表示する
のってどうやるんですかね?(ブラウザでアクセス)
前に
print "Content-type:text/html\n\n";
print "hello";
sleep(3);
print "hoge";

でやったらいかなかったので調べてみたらモジュール使うって見たんだけど、
最近やろうと思ってしらべたら前のResultをブックマークし忘れたので
どなたかおしえてくりんぴ
0912名無しさん@お腹いっぱい。02/02/27 22:36ID:???
$xxx = now;

//wait 3 sec
while(now < $xxx + 3);
0913名無しさん@お腹いっぱい。02/02/27 22:44ID:TYQQ82Xg
>912
Really?
0914名無しさん@お腹いっぱい。02/02/27 23:15ID:???
バッファリングしなければいいのでは
0915あさみ02/02/27 23:57ID:mGPuUcmq
大量のファイル(ディレクトリにまとめて入ってる)から
それぞれ同じ行をとりだして、
並べて表示させるにはどうしたらいいですか?

たとえば000.txt から 999.txtっていうのがひとつのディレクトリに
あって、ぜんぶのテキストから55行目だけをとりだしてそれを並べて
表示させたいのですけど。達人さんおねがいします。
0916名無しさん@お腹いっぱい。02/02/27 23:59ID:???
>>915
スタブ

後は、

open(DATA,"a.txt");

@dat = <DATA>;

print $dat[54];
0917あさみ02/02/28 00:03ID:Dy5p0v9j
>>916
スタブって????

それだとひとつのファイルからしかとりだせないじゃないですか。
ぜんぶのファイルを一度に操作しようとおもって
open(DATA,"dir/*.txt");
と打ってみたけどそこから先どうしていいかわからなくなってしまったんです。
0918名無しさん@お腹いっぱい。02/02/28 00:07ID:???
>>917
スタブじゃないグロブだ。それにすべての答えがある。さぁ、検索。
0919あさみ02/02/28 00:39ID:Dy5p0v9j
>>918
だめです。わかんない。
型グロブってまだやってないのだ。。。。
0920名無しさん@お腹いっぱい。02/02/28 00:39ID:???
>>919
型グロブじゃないよ。
0921あさみ02/02/28 01:05ID:Dy5p0v9j
>>920
わかんないよ。。。

@files = glob("*.txt");

foreach $file(@files){
open(DATE,"$file");
@dat = <DATE>;
print $dat [54];
}

これでもエラーでるよ。。。
0922あさみ02/02/28 01:28ID:Dy5p0v9j
わあああああああああ、できたよ!!!!!!!
ありがとしゃんしゃん!!!!>>920
ちなみにこれでできたよ!↓↓↓

@files = glob("*"); #全てのファイル名が返される

foreach $file (@files){
open (IN,"$file");
@dat = <IN>;
print "$dat[76]<br>";
close IN;
}

ふぅううううう。
0923名無しさん@お腹いっぱい。02/02/28 11:48ID:GCMIT34v
自動生成されるアンケートのページ(NAME=は数字だがバラバラ)で、
全てのradioboxがチェックされているかを調べるにはどうしたら
いいでしょうか?
0924名無しさん@お腹いっぱい。02/02/28 11:53ID:???
foreach(数字..数字){
if(!$FORM{"$_"}){print qq(入力漏れあり);}
}
0925名無しさん@お腹いっぱい。02/02/28 20:22ID:PHCtHVWr
>>924
お返事ありがとうございます。なるほどーですねー。

連続してない数字だったので、ちょっと応用します。
ちなみにNameが文字列だった場合は、はやりその文字列を
hiddenか何かで受け渡すしかないんですかねぇ、やっぱ。


0926名無しさん@お腹いっぱい。02/02/28 20:32ID:???
>925
foreach(keys %FORM){
if(!$FORM{"$_"}){print qq(入力漏れあり);}
}

こういう方法もあるにはあるけど、他の入力まで処理するのが難点。
余計なフォームがないならこれでもいける。

hiddenで渡すなら、受け取るName文字列をリスト配列にでもして作っておいた方がいいと思うぞ。
受け取るものが決まってるなら。
0927名無しさん@お腹いっぱい。02/02/28 21:24ID:gAyBZL7c
ちょっと質問させてください。

www.hogehoge.com/foo?id=bar

というように拡張子をつけない CGI などのスクリプトをたまに見かけますが,
これはどういうメリットがあるのでしょうか。
また,このように拡張子をつけないで実行するには
.htaccess でこのファイル名だけ CGI として扱うようにすればいいんでしょうか。
0928名無しさん@お腹いっぱい。02/02/28 22:07ID:PHCtHVWr
>>926
あー、賢いなー。なるほどー。
if(!$FORM("mode") とかかませばOKそうです。
ありがとうございました。
0929名無しさん@お腹いっぱい。02/02/28 22:22ID:???
>>927
メリットはCGIを作った人に聞いてくれ。
とりあえず思いつくのは、リンクを張るときに4バイト稼げるとか、
作った人にとって.cgiって付くURLがかっこ悪いとかかな。
あとは、www.hogehoge.com/foo?id=bar の実体は実は
www.hogehoge.com/foo/index.cgi?id=bar だったとか言うこともあり得るし。

.htaccessについてはまぁ、知らん。
偉い人スレで聞けば?
0930名無しさん@お腹いっぱい。02/02/28 22:54ID:???
実行可能ファイルを拡張子で識別するべきじゃない、とかなんとかあった気がしなくも無い。
0931名無しさん@お腹いっぱい。02/02/28 22:57ID:???
>>930
実行属性という物があるから気にする必要性がない。ってや津田ね。
0932名無しさん@お腹いっぱい。02/02/28 22:59ID:???
「あるディレクトリ以下のファイルは CGI プログラムと見なす」
という設定は、なんとなくカコイイと思ってしまうのですが、
自分でも理由が分かりません。
0933名無しさん@お腹いっぱい。02/02/28 23:01ID:???
>>932
俺は逆にダサイと思います。
人それぞれですね。
0934名無しさん@お腹いっぱい。02/03/01 14:08ID:5OIg3ecR
>>926
foreach(keys %FORM){
if(!$FORM{"$_"}){print qq(入力漏れあり);}
}

これだと、radioboxをクリックしてないと、$keyも$valueも
送られてこないからチェックできないですー。(T.T)
やっぱり、hiddenで配列にぶち込んで、渡すしかない?
0935ホワイトde−もうすぐ02/03/01 18:34ID:???
>>934
$keyも$valueも送られてこない=radio押されていない。

それはそれで一つのステータスではないの?
0936名無しさん@お腹いっぱい。02/03/01 20:03ID:5OIg3ecR
>>935
でも、それをチェックできないでしょ?
0937名無しさん@お腹いっぱい。02/03/01 20:10ID:???
RadioBOXのなまえが解かってるならそれで調べれば?
0938名無しさん@お腹いっぱい。02/03/01 20:14ID:5OIg3ecR
>>937
えっ?どうやって?
radioboxの名前がわかるためには、その名前の入ったデータを次の処理に渡さないと
わからないと思ったんですけど、他のやり方があるのかな?
ちなみに、radioboxの名前はCGIで自動生成されるので、毎回同じじゃないんです。
0939名無しさん@お腹いっぱい。02/03/02 00:52ID:???
>938
hiddenで名前埋め込むとか,HTMLで最初から押しておくとか。
0940nobodyさん02/03/02 13:45ID:LK7b/SU7
>>939
ありがとうございます。
hiddenはいい案ですね。楽で。
HTMLで最初から押すってのはどういう意味で?
0941nobodyさん02/03/02 14:24ID:???
>940
<input type="radio" checked>
0942nobodyさん02/03/02 18:18ID:LK7b/SU7
>>941
そうそう、checkedに今してます。
けど、何も考えないで、submitしちゃう奴とかいそうだなー。とか
思ったりして…
0943nobodyさん02/03/02 20:19ID:???
KENTさんのpetit BBSにひとりキャップ機能をつけようとするとき
どうすればよいのでしょうか?
0944nobodyさん02/03/02 20:26ID:???
>>943
マルチポスト。消えろ。
0945名無し02/03/02 21:31ID:???
あの、あぷろだにアップ時間を表示させることは出来ないのでしょうか?
0946nobodyさん02/03/02 21:34ID:???
>>945
やろうと思えば約1行。
0947名無し02/03/02 21:39ID:???
教えてください
お願いします
0948nobodyさん02/03/02 21:41ID:???
>>947
どうでもいいけどスレッドの無駄遣いするな。

始めから>>945>>947をいっぺんに質問すれば答えまで2レスですんだ。

後、すれ違い。
0949名無し02/03/02 21:42ID:???
ごめんなさい
0950nobodyさん02/03/03 09:42ID:nOwc+Svw
やぁ♪スレもストップしたところで質問だゾ(´д`)ハァハァ
ログファイルに書き込んであるH・Nから
発言数を調べて
発言者ランキングを作るにはどうしたらよいのでしょうか?

調べたけどわからなったから聞きに来たんだ。

0951nobodyさん02/03/03 09:49ID:nOwc+Svw
  ∧_∧
 ( ・∀・) マターリ待ちます
 ( ∪ ∪
 と__)__)
0952nobodyさん02/03/03 10:04ID:PnmTn1AV
発言者ランキングのどんなトコが判らんの?
発言数の取り方?
0953nobodyさん02/03/03 10:24ID:nOwc+Svw
それです(・∀・)!



0954nobodyさん02/03/03 10:34ID:PnmTn1AV
my %count;
open (DAT, $file) or die $@;
while (<DAT>) {
my $name = ....; # HN取り出し(ログ形式が不明なので直してチョ)
$count{$name}++; # $nameの発言数を+1
}
close (<DAT>);
# 回数が多い人から並び替えて出力
foreach (sort{$count{$b} <=> $count{$a}} keys %count) {
print $_, ":", $count{$_};
}
095595402/03/03 10:37ID:???
修正
close (<DAT>);
  ↓
close (DAT);
0956nobodyさん02/03/03 11:11ID:nOwc+Svw
センキュ!
いた違いだが見に行く(・∀・)!
ttp://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000288.jpg
ttp://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000289.jpg
ttp://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000230.jpg
0957nobodyさん02/03/03 11:14ID:nOwc+Svw
ttp://www.media-0.com/www/korabo/
0958nobodyさん02/03/03 11:55ID:nOwc+Svw
すごく申し訳ないのですが
ログファイルはtxt形式です。
保存されてる形は
no. http://ハァハァ.ne.jp comment name
なんですが、いかがなもんでしょう?
0959nobodyさん02/03/03 12:20ID:???
>>958
話が見えない。。。
0960nobodyさん02/03/03 12:32ID:nOwc+Svw
スマン
質問の仕方がかなりワルかったです。
普通に書いたら表示されなかったので、
(ログ形式が不明なので直してチョ)
と書いて頂けたのでログ形式を教えたら
表示されるようにしえて頂けるかとおもぉたのでです。

教えて(・∀・)!


0961nobodyさん02/03/03 12:36ID:???
>>960
さっきの3倍わからなくなった。
0962nobodyさん02/03/03 12:41ID:???
>>960
何で区切られてるの?
0963nobodyさん02/03/03 12:42ID:673UxTI5
いいか、落ち着いて書くんだ俺。
落ち着いて読むんだ君。

まず、954のやり方でやってみたがうまく表示されなかった。
そこで、俺はログファイルの形式を教えれば詳しく教えてもらえると思ったんだ。

そこで、ログファイルの形式とログファイルへの保存の仕方を君に教えたんだ。
どうだい?うまく通じたかな?

偉そうでスマン
0964nobodyさん02/03/03 12:42ID:???
スペースはかなり危険な気がしないでもない。
本文、名前、メアドに対策してるならいいけど・・・。

ちなみに俺はデコードせずに保存してます。絶対にコンフリクトしないしw。
0965nobodyさん02/03/03 12:45ID:673UxTI5
すみません。スペースではなく\t入れてます。
0966nobodyさん02/03/03 12:50ID:673UxTI5
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
次スレ
0967nobodyさん02/04/09 22:04ID:???
みんな移動してるみたいだから、埋めさせてね。
0968nobodyさん02/04/09 22:05ID:???
0969nobodyさん02/04/09 22:05ID:???
0970nobodyさん02/04/09 22:05ID:???
0971nobodyさん02/04/09 22:05ID:???
0972nobodyさん02/04/09 22:05ID:???
0973nobodyさん02/04/09 22:05ID:???
0974nobodyさん02/04/09 22:05ID:???
0975nobodyさん02/04/09 22:05ID:???
0976次スレ02/04/09 22:26ID:???
CGIだけどなんか質問ある Pert 5.01
http://pc.2ch.net/test/read.cgi/php/1015127347/
0977read.cgi02/04/09 23:23ID:???
1002
0978カウントダウン屋02/04/23 19:51ID:???
22
0979カウントダウン屋02/04/23 19:51ID:???
21
0980カウントダウン屋02/04/23 19:51ID:???
20
0981カウントダウン屋02/04/23 19:51ID:???
19
0982カウントダウン屋02/04/23 19:51ID:???
18
0983カウントダウン屋02/04/23 19:51ID:???
17
0984カウントダウン屋02/04/23 19:52ID:???
16
0985カウントダウン屋02/04/23 19:52ID:???
15
0986カウントダウン屋02/04/23 19:52ID:???
14
0987カウントダウン屋02/04/23 19:52ID:???
13
0988カウントダウン屋02/04/23 19:52ID:???
12
0989カウントダウン屋02/04/23 19:53ID:???
11
0990カウントダウン屋02/04/23 19:53ID:???
10
0991カウントダウン屋02/04/23 19:53ID:???
9
0992カウントダウン屋02/04/23 19:53ID:???
8
0993カウントダウン屋02/04/23 19:53ID:???
7
レス数が950を超えています。1000を超えると書き込みができなくなります。