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 に纏めたので、十分に調べた上で質問して下さい。
0866846
02/02/26 03:33ID:VU0igEUEしばらく勉強をして来ます。
0867864
02/02/26 03:34ID:???つっこみあんがと。ダウンなので寝るです
0868846
02/02/26 04:02ID:VU0igEUE0869846
02/02/26 04:03ID:VU0igEUE$hoge1=バナナ
だとして
バナナの数を求める場合です。
0870名無しさん@お腹いっぱい。
02/02/26 04:20ID:Lws/5PwUwhile (<FILE>) {
chomp ;
$count ++ ;
$hoge{$_}++ ;
}
foreach(keys %hoge ){
print "項目 : $_ 回数 : $hoge{'$_'}\n" ;
}
print "$hoge\n" ;
ファイルオープンクローズは省略してます。
0871870
02/02/26 04:59ID:Lws/5PwUというか・・846さんの問いとちょっとずれた回答だなあ・・・
忠実に答えるなら、
while(<FILE>){
chomp ;
$count ++ ;
if ( $_ eq 'バナナ' ) { $hoge1++ ;}
if ( $_ eq 'りんご' ) { $hoge2++ ;}
}
print "バナナ $hoge1個 りんご $hoge2個 全部で$count個\n" ;
こんな感じでしょうか。
0872846
02/02/26 05:24ID:VU0igEUEありがとうございました(泣
おかげで完成しました。
すごく感謝しています。
ほんとにありがとうございます。
0873名無しさん@お腹いっぱい。
02/02/26 17:43ID:vFUBaFo2あるcgiファイル(Cで作ったバイナリファイル、変更不可)にperlでフィルタを
かけてperlの中からキックしてやる処理を行おうとしています。
open(*i, *o, "aaa.cgi", $param)
で起動かけてるんですが、この渡し方だとgetメソッドでわたるみたいなのです。
どうやらこのcgi、postメソッドで引数を取得しているらしいのですが、postメ
ソッドへの値の渡し方がよくわかりません。受け取り方ならどこにでも乗ってる
んですけど。
知ってる方、教えてください。お願いします。
0874873
02/02/26 17:44ID:vFUBaFo2open->open2の間違いです。
0875名無しさん@お腹いっぱい。
02/02/26 22:58ID:???0876名無しさん@お腹いっぱい。
02/02/26 23:07ID:G1R05+XZdecodeサブルーチン内
→ 現状 : &jcode'convert(*value, "sjis");
→ 変更 : &jcode'convert(*value, "utf8");
headerサブルーチン内
→ 現状 : <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
→ 変更 : <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">
でいいのでしょうか?
ちなみに文字コードの変換はエディタで終わってます。
0877名無しさん@お腹いっぱい。
02/02/26 23:09ID:???そらそうだ。
0878名無しさん@お腹いっぱい。
02/02/26 23:28ID:???0879名無しさん@お腹いっぱい。
02/02/27 00:02ID:SOuE237Tゲッ、ではどうすればいいんでしょうか?
0880名無しさん@お腹いっぱい。
02/02/27 00:11ID:CwyphmC/激しく同意
0881名無しさん@お腹いっぱい。
02/02/27 00:27ID:???Jcode.pmを使う。
use Jcode;
my $utf8 = jcode(\$value)->utf8;
あと、perl4でなければ、jcode.pl使う時にその書き方はヤメレ
jcode::convert(\$value, 'sjis');
0882名無しさん@お腹いっぱい。
02/02/27 00:31ID:nZ+PTVkRやっぱ参考書買ったほうがいいですよね?みなさんどうやって覚えたの?
掲示板とか作ってみたいのですが。
0883882
02/02/27 01:02ID:???すいましぇん・・。
0884名無しさん@お腹いっぱい。
02/02/27 09:44ID:jpwD5RBsを0.3333333・・・ではなく、桁数を制限して0.33にするのはどうすれば良いのでしょうか?
0885名無しさん@お腹いっぱい。
02/02/27 09:46ID:???sprintf("%.2f",$A);
0886884
02/02/27 10:23ID:jpwD5RBs有り難う御座います!
0887873
02/02/27 11:09ID:/GyUzfOU引数を標準入力へ渡すのは出来てるのです。
teeコマンドで、確認しましたので。
perlモジュールからcgiをキックするとき、メソッドを環境変数に
設定してあげればいいのかなぁ・・・・。
0888884
02/02/27 13:55ID:jpwD5RBsリスト表示させる構文の中で
use integer;
$A = $B / $C;
を記述すると最初の情報しか表示されなくなります・・・
何が問題なのでしょうか?
0889名無しさん@お腹いっぱい。
02/02/27 13:58ID:????
0890名無しさん@お腹いっぱい。
02/02/27 14:02ID:???use integer;
の意味わかってる?
0891884
02/02/27 14:20ID:jpwD5RBs手元のレファレンスブックをパラパラと参照しているのです。
ちなみに、use integer; をとっても最初の情報しか表示されないので、
状況は変わらないです・・・。
0892名無しさん@お腹いっぱい。
02/02/27 14:35ID:???>最初の情報しか
??
0893名無しさん@お腹いっぱい。
02/02/27 15:07ID:uzDDNMO0返信できる掲示板を改造し、親記事への返信に対してradioboxで5段階の採点
ができるようにしました。が、たまに採点がおかしくなります。
1ページに表示されている全ての返信記事に一気に採点できるようにしました。
$noは親記事のNo. $res_noは返信記事のNo.です。
簡単に書きます。
-------■フォーム部分■---------
[最高:<INPUT TYPE=RADIO NAME=\"($no)-$res_no\" value=5>]
[良い:<INPUT TYPE=RADIO NAME=\"($no)-$res_no\" value=4>]
のようなものをあと3つ
-------■フォーム部分■---------
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:???http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0898名無しさん@お腹いっぱい。
02/02/27 15:14ID:uzDDNMO0すみません。書き直します。
0899名無しさん@お腹いっぱい。
02/02/27 16:08ID:uzDDNMO0連続でなく(1,2,3,4,5....)
同点場合は同じ順位になるやつです。(1,2,2,2,5,6,7)
0900名無しさん@お腹いっぱい。
02/02/27 16:11ID:???同一順位の奴リストで記憶して一気書き。
0901名無しさん@お腹いっぱい。
02/02/27 17:02ID:s1a46wqmif ($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:???00や51〜99も入っちゃうけどな。
それを除外する方法は自分で調べて。
0903名無しさん@お腹いっぱい。
02/02/27 17:25ID:???$hoge =~ /0(\d\d)_0(\d\d)/;
print "グループ1" if ($1 == 0 and $2 >=1 $2 <= 50 );
動作確認してないけど。
0904名無しさん@お腹いっぱい。
02/02/27 17:29ID:???$1 == 1
にしておかないと、グループ0になりますぜ?
0905901
02/02/27 19:21ID:???902さんの
if ($hoge =~ /^001_0\d\d$/) { print "001グループです。。。"; }
これで一応問題がないかのように(;´Д`)動作しておりますが、このまま使い続けちゃマズイですか?
もちろん51〜99なんて存在しないです。。。
903さんの文章は今のおいらじゃ理解できないみたいです。。
もうちょっと経験値をためてレヴェルうpしてから、改めて読み直すことにします
0906名無しさん@お腹いっぱい。
02/02/27 19:56ID:???っつーか、根本的にもっと綺麗にデータ処理をしようと思わないのだろうか。
0907名無しさん@お腹いっぱい。
02/02/27 20:42ID:uzDDNMO0自分で同時に書き込むってできないし。
#ローカルサーバ立ち上げてます。
0908名無しさん@お腹いっぱい。
02/02/27 20:47ID:???漏れの場合、ロックしたままランダムな時間 sleep() 。
でも、もっとうまい方法があるような気が。
0909名無しさん@お腹いっぱい。
02/02/27 21:33ID:???1.ロック解除ルーチンをコメントアウトして実行。
ロックがかかっているか確認。
2.そのプログラムをもう一度実行。
六句により書き込めないことを確認。
3.コメントアウトした部分とロックを元に戻し実行。
書き込めればロックは作動している。
サーバ立てるのはいいがOS位書いてほしかった。
0910名無しさん@お腹いっぱい。
02/02/27 22:02ID:uzDDNMO0ありがとうございます。
サーバはLinuxです。
0911名無しさん@お腹いっぱい。
02/02/27 22:34ID:TYQQ82XgHelloを表示して、3秒くらいの処理行ったあとその出力を表示する
のってどうやるんですかね?(ブラウザでアクセス)
前に
print "Content-type:text/html\n\n";
print "hello";
sleep(3);
print "hoge";
でやったらいかなかったので調べてみたらモジュール使うって見たんだけど、
最近やろうと思ってしらべたら前のResultをブックマークし忘れたので
どなたかおしえてくりんぴ
0912名無しさん@お腹いっぱい。
02/02/27 22:36ID:???//wait 3 sec
while(now < $xxx + 3);
0913名無しさん@お腹いっぱい。
02/02/27 22:44ID:TYQQ82XgReally?
0914名無しさん@お腹いっぱい。
02/02/27 23:15ID:???0915あさみ
02/02/27 23:57ID:mGPuUcmqそれぞれ同じ行をとりだして、
並べて表示させるにはどうしたらいいですか?
たとえば000.txt から 999.txtっていうのがひとつのディレクトリに
あって、ぜんぶのテキストから55行目だけをとりだしてそれを並べて
表示させたいのですけど。達人さんおねがいします。
0916名無しさん@お腹いっぱい。
02/02/27 23:59ID:???スタブ
後は、
open(DATA,"a.txt");
@dat = <DATA>;
print $dat[54];
0917あさみ
02/02/28 00:03ID:Dy5p0v9jスタブって????
それだとひとつのファイルからしかとりだせないじゃないですか。
ぜんぶのファイルを一度に操作しようとおもって
open(DATA,"dir/*.txt");
と打ってみたけどそこから先どうしていいかわからなくなってしまったんです。
0918名無しさん@お腹いっぱい。
02/02/28 00:07ID:???スタブじゃないグロブだ。それにすべての答えがある。さぁ、検索。
0919あさみ
02/02/28 00:39ID:Dy5p0v9jだめです。わかんない。
型グロブってまだやってないのだ。。。。
0920名無しさん@お腹いっぱい。
02/02/28 00:39ID:???型グロブじゃないよ。
0921あさみ
02/02/28 01:05ID:Dy5p0v9jわかんないよ。。。
@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全てのradioboxがチェックされているかを調べるにはどうしたら
いいでしょうか?
0924名無しさん@お腹いっぱい。
02/02/28 11:53ID:???if(!$FORM{"$_"}){print qq(入力漏れあり);}
}
0925名無しさん@お腹いっぱい。
02/02/28 20:22ID:PHCtHVWrお返事ありがとうございます。なるほどーですねー。
連続してない数字だったので、ちょっと応用します。
ちなみにNameが文字列だった場合は、はやりその文字列を
hiddenか何かで受け渡すしかないんですかねぇ、やっぱ。
0926名無しさん@お腹いっぱい。
02/02/28 20:32ID:???foreach(keys %FORM){
if(!$FORM{"$_"}){print qq(入力漏れあり);}
}
こういう方法もあるにはあるけど、他の入力まで処理するのが難点。
余計なフォームがないならこれでもいける。
hiddenで渡すなら、受け取るName文字列をリスト配列にでもして作っておいた方がいいと思うぞ。
受け取るものが決まってるなら。
0927名無しさん@お腹いっぱい。
02/02/28 21:24ID:gAyBZL7cwww.hogehoge.com/foo?id=bar
というように拡張子をつけない CGI などのスクリプトをたまに見かけますが,
これはどういうメリットがあるのでしょうか。
また,このように拡張子をつけないで実行するには
.htaccess でこのファイル名だけ CGI として扱うようにすればいいんでしょうか。
0928名無しさん@お腹いっぱい。
02/02/28 22:07ID:PHCtHVWrあー、賢いなー。なるほどー。
if(!$FORM("mode") とかかませばOKそうです。
ありがとうございました。
0929名無しさん@お腹いっぱい。
02/02/28 22:22ID:???メリットは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:???実行属性という物があるから気にする必要性がない。ってや津田ね。
0932名無しさん@お腹いっぱい。
02/02/28 22:59ID:???という設定は、なんとなくカコイイと思ってしまうのですが、
自分でも理由が分かりません。
0933名無しさん@お腹いっぱい。
02/02/28 23:01ID:???俺は逆にダサイと思います。
人それぞれですね。
0934名無しさん@お腹いっぱい。
02/03/01 14:08ID:5OIg3ecRforeach(keys %FORM){
if(!$FORM{"$_"}){print qq(入力漏れあり);}
}
これだと、radioboxをクリックしてないと、$keyも$valueも
送られてこないからチェックできないですー。(T.T)
やっぱり、hiddenで配列にぶち込んで、渡すしかない?
0935ホワイトde−もうすぐ
02/03/01 18:34ID:???$keyも$valueも送られてこない=radio押されていない。
それはそれで一つのステータスではないの?
0936名無しさん@お腹いっぱい。
02/03/01 20:03ID:5OIg3ecRでも、それをチェックできないでしょ?
0937名無しさん@お腹いっぱい。
02/03/01 20:10ID:???0938名無しさん@お腹いっぱい。
02/03/01 20:14ID:5OIg3ecRえっ?どうやって?
radioboxの名前がわかるためには、その名前の入ったデータを次の処理に渡さないと
わからないと思ったんですけど、他のやり方があるのかな?
ちなみに、radioboxの名前はCGIで自動生成されるので、毎回同じじゃないんです。
0939名無しさん@お腹いっぱい。
02/03/02 00:52ID:???hiddenで名前埋め込むとか,HTMLで最初から押しておくとか。
0940nobodyさん
02/03/02 13:45ID:LK7b/SU7ありがとうございます。
hiddenはいい案ですね。楽で。
HTMLで最初から押すってのはどういう意味で?
0941nobodyさん
02/03/02 14:24ID:???<input type="radio" checked>
0942nobodyさん
02/03/02 18:18ID:LK7b/SU7そうそう、checkedに今してます。
けど、何も考えないで、submitしちゃう奴とかいそうだなー。とか
思ったりして…
0943nobodyさん
02/03/02 20:19ID:???どうすればよいのでしょうか?
0945名無し
02/03/02 21:31ID:???0947名無し
02/03/02 21:39ID:???お願いします
0948nobodyさん
02/03/02 21:41ID:???どうでもいいけどスレッドの無駄遣いするな。
始めから>>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+Svw0954nobodyさん
02/03/03 10:34ID:PnmTn1AVopen (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{$_};
}
0955954
02/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+Svw0958nobodyさん
02/03/03 11:55ID:nOwc+Svwログファイルはtxt形式です。
保存されてる形は
no. http://ハァハァ.ne.jp comment name
なんですが、いかがなもんでしょう?
0960nobodyさん
02/03/03 12:32ID:nOwc+Svw質問の仕方がかなりワルかったです。
普通に書いたら表示されなかったので、
(ログ形式が不明なので直してチョ)
と書いて頂けたのでログ形式を教えたら
表示されるようにしえて頂けるかとおもぉたのでです。
教えて(・∀・)!
0963nobodyさん
02/03/03 12:42ID:673UxTI5落ち着いて読むんだ君。
まず、954のやり方でやってみたがうまく表示されなかった。
そこで、俺はログファイルの形式を教えれば詳しく教えてもらえると思ったんだ。
そこで、ログファイルの形式とログファイルへの保存の仕方を君に教えたんだ。
どうだい?うまく通じたかな?
偉そうでスマン
0964nobodyさん
02/03/03 12:42ID:???本文、名前、メアドに対策してるならいいけど・・・。
ちなみに俺はデコードせずに保存してます。絶対にコンフリクトしないしw。
0965nobodyさん
02/03/03 12:45ID:673UxTI5レス数が950を超えています。1000を超えると書き込みができなくなります。