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

Perlコーディング初心者質問スレ Part 48

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/04/26(水) 18:00:50ID:RLbnve1J
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0866nobodyさん2006/05/27(土) 00:26:19ID:???
ソースを印刷してはさみで切る
0867nobodyさん2006/05/27(土) 02:16:48ID:???
>>865
大雑把に。
foreach(split(/\n/, $data)){
push(@news, $_."\n") if (/<!--テンプレ-->/.../<!--テンプレ-->/);
}

それと、一応個人サイトへのリンクは、h抜いて書いて。
0868nobodyさん2006/05/27(土) 03:19:39ID:???
> それと、一応個人サイトへのリンクは、h抜いて書いて。

なんで?
0869nobodyさん2006/05/27(土) 03:46:52ID:???
マナー
自分のサイトのアクセス解析で2chから大量に来てたら、
ちょっとヒくんじゃね?
0870nobodyさん2006/05/27(土) 03:50:24ID:???
昨日LWPの存在を知り、Perlをインストールしてプログラム書いて「便利便利!」
と喜んでました。
で、プロバイダ(ぷらら)に上げたら動きませんでした。
ググって見ると「nifty plala biglobeなどは他サーバへのアクセスができないようになってるので無理」
なる情報を見つけました。
これはあきらめるしかないのでしょうか?
0871nobodyさん2006/05/27(土) 03:53:16ID:???
>>869
そうだね
0872nobodyさん2006/05/27(土) 04:07:27ID:???
>>870
どんなモジュールが入っているのかまず調べるべきでしょう。
0873nobodyさん2006/05/27(土) 04:29:51ID:???
>>872
そうですね。モジュールの調べ方は知らないので明日調べてみます。

plalaのサイトにはPerlのバージョンは5.8と書いてありました。(Perlに関してはそれだけ)
私が自分のWinにインストールしたのはActivePerlの5.8xxxです。
Jcode.pmがデフォで入ってないのにびっくりしました。jcode.plを使ってます。
LWPは、動かなかったのでプロバイダにモジュールがないのかな?
と思いsite/libのLWPディレクトリをUPしてみましたが駄目でした。
LWPとは別にHTTP::Liteなるものもあるようなので明日試してみます。
もし、plalaで(LWP||HTTP::Lite)を(使えてる||使えてない)な人がいらっしゃいましたら
情報くださると助かりますです。
#「push @a, $b」と「push(@a, $b)」はどっちにすべきですか?
0874nobodyさん2006/05/27(土) 04:49:10ID:???
>>873
本題とはそれるけど、
5.8なら Jcode.pm っていうか Encode.pm が入ってるから、そっち使えばいいと思うよ。
jcode.pl じゃユニコのデコエンコできないからねえ。
push () は自分で見やすいほうを。
あとniftyは、今はどうか知らないけど、標準モジュールとか何も入ってなかったとオモタ。
0875nobodyさん2006/05/27(土) 04:49:52ID:???
perlにはEncodeがあるからな。
plalaはデフォでJcode入ってるよ。
サーバー間通信がそもそも出来ないように設定してあるのでどうやってもLWPは使えない

それと、普段は前者だが引数が二つ以上なら
push @a, ( $b, $c );
とかやるかも。
0876nobodyさん2006/05/27(土) 04:58:19ID:???
> マナー
> 自分のサイトのアクセス解析で2chから大量に来てたら、
> ちょっとヒくんじゃね?

そもそもマナーとは何かだよね。
でさ、何で「ヒく」んだろう。
0877nobodyさん2006/05/27(土) 04:59:20ID:???
>>873
恐らく、デーモン的な使われ方を阻止する為でしょう。
つまり、セキュリティ上の仕様ではないでしょうか。

pushについては私は前者の方が簡潔で好きですけど、
カッコを付けないと、優先順位の問題が置きやすいので、一長一短です。
Perlのコードは十人十色(TMTOWTDI)なのでお好きにどうぞ。

優先順位の問題は例えば print ($a + $b), " is answer"; と書くと
" is answer" が無視されてしまいます。これを防ぐには
print (($a + $b), " is answer"); のようにカッコをつける必要がります。
または print +($a + $b), " is answer"; のように前に「+」をつけてもいいですけど。
0878nobodyさん2006/05/27(土) 05:06:49ID:???
>>873
#!/usr/bin/perl

use File::Find;

print "Content-type: text/html;\n\n";
find(\&wanted, @INC);

sub wanted {
    if(/\.pm$/i){print "$File::Find::name<br>\n";}
}
0879nobodyさん2006/05/27(土) 05:09:04ID:???
>>876
こちらへどうぞ。

初心者の質問
http://etc3.2ch.net/qa/
08808732006/05/27(土) 17:45:38ID:???
>>874 >>875 >>877 >>878
ありがとうございました。
モジュールの取得も参考になりました。
2chでこんなに丁寧に回答してもらったのは初めてです。
無駄にHTTP::Liteとかも試してみましたが当然だめでした。
あきらめることにします。
0881nobodyさん2006/05/27(土) 20:52:04ID:/9Ndz8t/
if ($in{'name'} eq "") { $in{'name'} = "$noname"; }
で$noname=名無しさんって感じになってるんだけどコレだとクッキー保存されちゃって
次回からはこの名前を一回消して自分のHNに変える必要がある。
だからこの名無しの時だけ次回からは名前欄が空欄とか名無しじゃないときのHNにしておくみたいな事出来る?
説明下手だがこんな事をしたい。
0882nobodyさん2006/05/27(土) 21:06:43ID:???
よくわからんが、if文いっこ挟むだけでできるでしょ。
クッキーの情報を使いたくない時には、そうなるように書けばいいだけ。
0883nobodyさん2006/05/27(土) 21:15:40ID:/9Ndz8t/
それがよく分からんのだが・・・。
0884nobodyさん2006/05/27(土) 21:27:21ID:???
my $name = $in{'name'};
みたいのを用意すれば、if ($name eq "") { $name = $noname; } しても
$in{'name'} に $noname が代入されませんよ、とか。

別に必ず $in{'name'} をそのままクッキーに保存しなきゃいけないわけじゃないし
クッキーから読み出した前回投稿時の名前を仕舞っておく変数ぐらい
あってもいいよね、とか。

方法はいろいろ。
0885nobodyさん2006/05/27(土) 21:35:57ID:???
>>881 が「分からん」のは、条件分岐云々じゃなくて「クッキーの焼き方」だべさ。たぶんね。
0886nobodyさん2006/05/28(日) 06:25:30ID:LqLk4cEL
perlの質問です。

$jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg;

という構文の解読の仕方が分からないのですが、この説明をお願いできませんか?
どういうことをしている構文なのでしょうか?
0887nobodyさん2006/05/28(日) 06:35:12ID:???
>>886
URLエンコード または URIエンコード でググるべし
0888nobodyさん2006/05/28(日) 06:56:06ID:LqLk4cEL
>887
朝早くから答えて頂きましてどうもありがとうございました!
教えて頂いたキーワードで只今ググって来ました。

エンコードをしているのは分かるのですが
この構文の流れを説明していただけないかと思いまして。
お願いします!教えてください!

まず分からないのは、
=~s/(\W)/'%' と unpack('H2',$1)/eg の間にある "." なのですが
正規表現の結果を足しているという事なのでしょうか?
何の為に???????(x_x)?
と思って全く発想が浮かびません。。。
ヒントだけでも頂けないでしょうか?

ちなみに、perlの辞書を片手に頑張ってはいるのですが
自分の未熟さに頭が上がりません。。。
よろしくお願いします!!
0889nobodyさん2006/05/28(日) 08:55:15ID:???
$jump_url=~s///eg;
s///が正規表現による置換。オプション'e'と'g'。
(\W)
マッチさせる正規表現。
'%' . unpack('H2',$1)
本来置き換える文字列だけど、'e'がついてるから実行する文。

あとは辞書で。
0890nobodyさん2006/05/28(日) 10:59:02ID:???
file.txt
1,あいうえお,142
2,かきくけこ,127
3,さしすせそ,139

というファイルがある時、この3列目が多い順に行をsortし表示するには
どうすればよいですか?
0891nobodyさん2006/05/28(日) 11:01:39ID:???
質問を少し間違えました。
この3列目が多い順に行をsortし2列目を表示するには
どうすればよいですか?
でした。よろしくお願いします。
0892nobodyさん2006/05/28(日) 11:32:27ID:LqLk4cEL
>889
ありがとうございました。
期待していた回答とは違いましたが、この辞書とネットを使いながらいろいろ試してみます。
0893nobodyさん2006/05/28(日) 11:42:02ID:???
>>892
'%'. を入れたのと入れないのを両方実行して、比較してみれば意味が分かるよ。
0894nobodyさん2006/05/28(日) 11:48:40ID:???
>>890,891
open(F, 'file.txt');
while (<F>) {
 chomp();
 push(@data, [split(/,/)]);
}
close(F);
@data = sort {$b->[2] <=> $a->[2]} @data;
foreach (@data) {
 print $_->[1], "\n";
}
0895nobodyさん2006/05/28(日) 14:52:39ID:???
test.plというファイルを用意して同じディレクトリにfile.txtを置き、
「perl test.pl」で以下のコードを実行したのですがファイルを開けません。
何か書き方が悪いんでしょうか。

test.plの内容:
my @buf, $line;

if(! open(IN, "<file.txt")){
@buf = <IN>;
foreach $line (@buf){
print $line;
}
close(IN);
}

* if( -e "file.txt"){}でチェックしたところファイルは存在していました。
* 環境はWinXPHomeSP2 + ActivePerl v5.8.6 です。
0896nobodyさん2006/05/28(日) 14:55:53ID:???
>>895
openの前の!が余計
08978952006/05/28(日) 15:00:28ID:???
直りました。ありがとうございます。
0898nobodyさん2006/05/28(日) 16:20:50ID:LqLk4cEL
>894
すみません。教えて頂いたその方法でやってみたのですが
何度やってもエラーになってしまいます。何故でしょうか?
0899nobodyさん2006/05/28(日) 16:32:42ID:???
>>898
なんてエラーでてるのか書きなよ。
ブラウザで print "Content-type: text/html\n\n"; 忘れてるとかだったらはたかれるよ。
0900nobodyさん2006/05/28(日) 16:35:07ID:???
>>898
見やすいように全角スペース使ってインデントしてあるけど、削除した?
0901nobodyさん2006/05/28(日) 21:59:29ID:???
>>895
!はnotの意味だぞ、と指摘しないと成長しないような気がする
0902nobodyさん2006/05/28(日) 22:29:52ID:???
本人が何を思って ! をつけたかだな。
0903nobodyさんNGNG
正常終了コードが 0 と勘違いしたのでは
0904nobodyさん2006/05/28(日) 23:07:43ID:???
たまたま見たサンプルの記述がそれだったから
に、10ガバス
0905nobodyさん2006/05/29(月) 08:12:56ID:???
大本命に随分少額だな。
はらたいらに100点並
0906nobodyさん2006/05/29(月) 09:30:26ID:???
クイズダービーだっけ?
0907bc2006/05/29(月) 14:43:29ID:BOZTb2Dk
http://www.kumagaya.or.jp/~chichibu/cgi-prog/form_rb.txt
でラジオボタンって作れるんですか??
HTMLのフォームと違うんですけど
これだとただの表示されるだけじゃないんでしょうか??
0908nobodyさん2006/05/29(月) 15:03:55ID:???
>>907
> でラジオボタンって作れるんですか??
作れません。

> これだとただの表示されるだけじゃないんでしょうか??
その通りです。で、何か問題でも?
0909nobodyさん2006/05/29(月) 15:58:10ID:???
時間のデータで、○○時○○分と書かれたものがあります
ここから○○を抜き出すことはできます

これを数字として扱って比較したいのですが、どうしたらいいですか?
時間や分は「09時05分」などと必ず二桁で保存されています
0910nobodyさん2006/05/29(月) 16:00:00ID:???
すbstr
0911nobodyさん2006/05/29(月) 16:04:23ID:???
>>909
<=> を使え。
「必ず二桁」なら文字列比較でも結果は変わらないはずだけど。

SEE ALSO
  perldoc -f sort
09129092006/05/29(月) 16:08:04ID:???
わかりました
有り難うございます
09139072006/05/29(月) 17:23:20ID:BOZTb2Dk
http://www.kumagaya.or.jp/~chichibu/cgisyoho.html
このサイトのラジオボタンのうけ渡し方で
HTMLのソースと書いてあるんですが
それはHTMLのソースが間違っているということですか??
0914nobodyさん2006/05/29(月) 17:47:57ID:???
質問の意味が分からないのは俺だけ?
0915nobodyさん2006/05/29(月) 17:48:21ID:???
>>913
> それはHTMLのソースが間違っているということですか??
いいえ。

そのページの言う HTML ソースというのは
http://www.kumagaya.or.jp/~chichibu/form_rb.html
の「ページのソース」のことだと思います。
だとしたら特に間違ってはいません。

http://www.kumagaya.or.jp/~chichibu/cgi-prog/form_rb.txt
は上記ページのフォームから値を受け取り、結果表示を行うスクリプトのソースです。
ですからそこにラジオボタンを表示するコードが含まれていなくても別段問題ありません。

正直、あなたが何を問題とされているのか良く分かりません。失礼ですが基礎的な理解が不足しているように見受けられます。
このまま質問を続けられると、あなた宛にあまりフレンドリーでないレスが殺到する可能性があり、それは我々としては大変迷惑なので、WWW、HTML 等の基礎を学んでから出直されることをお勧めします。
0916nobodyさん2006/05/29(月) 17:49:47ID:???
あれかな、「受け渡し方」って書いてあるけど、受け方しか書いてないんじゃボケェ! っていうこと?
0917nobodyさん2006/05/29(月) 18:08:40ID:???
>>915の親切さに泣いた。おとなってえらいな。
0918nobodyさん2006/05/29(月) 20:12:07ID:???
最近の若者はすぐ切れるからな。
0919nobodyさん2006/05/29(月) 20:31:40ID:???
>907
君の質問の仕方が下手なのと、>>915さんって親切だなって思った。
そして、その参考にしてるサイトは駄目駄目なので他所を探すことをおすすめします。


サンプル動かして、表示されたページが文字化け万歳とか哀しかったです orz
09209072006/05/30(火) 00:06:24ID:B/4ya/Hv
おおぉありがとうございます
すげー勘違いしてました
>>919
でもサンプルが詳しいサイトはあんまりないんですよ
探したんですが
0921nobodyさん2006/05/30(火) 00:18:38ID:D128RUeT
質問いいですか?
>890さんじゃないけど
file.txt
1,あいうえお,0-1-8
2,かきくけこ,1-3-2
3,さしすせそ,1-9-4

この3列目の ○-△-□ の △ の数が多い順に行をsortして、その行の2列目を表示するための方法を教えてください
0922nobodyさん2006/05/30(火) 00:29:16ID:???
>>921
open(F, 'file.txt');
while (<F>) {
chomp();
($num, $name, $value) = split(/,/);
$value = (split(/-/, $value))[1];
push(@data, {name => $name, value => $value});
}
close(F);
@data = sort {$b->{value} <=> $a->{value}} @data;
foreach (@data) {
print $_->{name}, "\n";
}
0923nobodyさん2006/05/30(火) 01:11:36ID:D128RUeT
早い!!?
>922さん
ありがとうございます
早速試してみます
0924nobodyさん2006/05/30(火) 01:20:49ID:D128RUeT
>922さん
質問してもいいですか
6行目の push(@data, {name => $name, value => $value}); の部分なのですが
右から2番目の value は $value じゃなくても良いのですよね?
他にも{}の中にあるもので $ が付いていない箇所があるのですがこれで正しいのですよね!
わたしには初めてで読めなかったので、参考に6行目の説明をお願いできませんかm(*u_u)m
0925nobodyさん2006/05/30(火) 01:32:02ID:D128RUeT
>922さん
今アップしてみたのですが正しく表示できました!
出来たものの、>922さんが書かれた文の意味は分かりません。。。
どうか教えてもらえませんか?
0926nobodyさん2006/05/30(火) 01:33:17ID:???
>>924,925
ええと、ハッシュは知ってるかな。
%hoge = ("name" => $name, "value" => $value);
みたいなやつね。
このキーの部分のダブルクオーテーションは、省略できることになってる。
%hoge = (name => $name, value => $value);
みたいにね。
で、右辺を()でなくて{}で囲うと、ハッシュのリファレンスになる。
リファレンスが分からなかったら、ネットか書籍で調べて。
それが6行目の{name => $name, value => $value}

ハッシュはスカラーなので、
$hoge = {"name" => $name, "value" => $value};
と代入できる。
この$nameを取り出すのが、$hoge->{"name"}なんだけど、
このダブルクオーテーションも省略できるので、9行目の
$a->{value}みたいな書き方になる。

詳しくは、「ハッシュ リファレンス」でググってね。
0927nobodyさん2006/05/30(火) 01:37:27ID:???
このスレの優しさに泣いた
0928nobodyさん2006/05/30(火) 01:41:26ID:D128RUeT
>926さん
わぁ♪ありがとうございます!早速ググってきますっ
0929nobodyさん2006/05/30(火) 01:42:38ID:???
このスレってこんな親切だったっけw

>>926
最近どうしたんですか?(ぇー
0930nobodyさん2006/05/30(火) 04:36:25ID:???
テンプレサイト作って、過去に出てきた例集なんてものあったら便利かもね
正直 CSV ソートの質問は秋田(;´Д`)
0931nobodyさん2006/05/30(火) 05:26:45ID:D128RUeT
Missing right curly or square bracket at ./sub.cgi line 67, at end of line
syntax error at ./sub.cgi line 67, at EOF
./sub.cgi had compilation errors.

というエラー文が出ているのは、どんな意味なのでしょうか?

0932nobodyさん2006/05/30(火) 06:07:15ID:???
>>931
「EOFまで行っても } が足りないですよ。はい、コンパイルエラー」
閉じ忘れたカッコを頑張って探してください。

エラーメッセージの意味がわかんないと毎回同じように困るわけで、
Excite翻訳を利用したりして、慣れるようにしてください。

>>930
随分前(テンプレが桂三枝で始まってた頃)に、FAQ・いい回答を
載せるCGIを提供してくれた人がいたような…どうなったか覚えてないんだけどね。
0933nobodyさん2006/05/30(火) 06:53:05ID:D128RUeT
>>932さん
ありがとうございました!地道に探してたら括弧をエスケープしているのに気が付きました。
それでまたエラーが出てきたので、Exite翻訳を利用して解決しようとしたところ
[baby.html:?:warn] Malformed UTF-8 character (2 bytes, need 1) in array dereference.
というエラーなのですが
[baby.html:、:、警告、]、アレイ反参照の奇形のUTF-8キャラクタ(2バイト、必要性1)。
という結果になって意味が分かりません(P口`q。)".
これはどういう意味なのでしょうか?
0934nobodyさん2006/05/30(火) 07:01:17ID:D128RUeT
ちなみに、/baby.cgi?page=1&id=0000 というような構成で
ログにあるデータを数ページ分吐き出すようにしているのですが
一部のページのみにこのエラー文出てしまいます。
サーバのスペックが低いからでしょうか。。。?
0935nobodyさん2006/05/30(火) 08:49:24ID:???
なんでサーバのスペックやねんw
恐らくログにWindowsの外字とか、UTF-8で扱えない文字が入っているはず。
根本的解決には本人にそれなりの知識とそれなりの技術が必要。
文字コードがらみの処理はややこしいので、改造レベルの人はあきらめるのが吉。

# というかデフォでwarning入ってんのか?
0936nobodyさん2006/05/30(火) 09:39:52ID:???
配列のデリファレンスの中に不正なUTF8文字列が含まれています、だろ。

その行晒せや。
0937nobodyさん2006/05/30(火) 11:01:23ID:???
>>936
ログの何行目というエラーの出方ではないので「その行晒せ」は無理だろう。
(質問者に、そこを調べて提出せよというのは難しそう)
0938nobodyさん2006/05/30(火) 12:28:11ID:RehvEaNH
すみません。1行目のところで「Permission denied at cgiファイル名 1行目」
とエラーになりファイルオープンできません。権限で怒られているのはなんとなく分かるのですが
対処法を教えてください。よろしくお願いします。
※aaaaa.txtというファイルは存在しません。
※cgiファイルのパーミッションは777です。

1 open(OUT, '>aaaaa.txt') or die "$!";
2 print OUT "abcde";
3 close(OUT);
0939nobodyさん2006/05/30(火) 12:34:02ID:???
ファイルが無いので新しく作ろうとしているが権限が無くて作れない
09409382006/05/30(火) 12:38:16ID:???
ディレクトリのアクセス権限か.htaccessの影響のようでした。
影響の無いディレクトリではオープンできました。
お騒がせしました。
0941nobodyさん2006/05/30(火) 21:18:16ID:???
テストプログラムを動かすときって、だいたい 「Hello World !」 ってやってるけど、
それじゃああんま面白くないし、2〜3行に渡ってやってみたいんだけど、そういうのってなんかある?
なんか知ってたり面白いの思いついたら教えてください。(´▽`)ノ
0942nobodyさん2006/05/30(火) 21:27:57ID:???
いや、テストなんだし何でもいいと思っている俺ガイル
0943nobodyさん2006/05/30(火) 21:48:36ID:???
1から10を足すとか。
0944nobodyさん2006/05/30(火) 21:56:09ID:???
いやなんかこう
print 'Hello World !!';
はいいけど、
print <<__EOT__;
Hello World !!
__EOT__
とか、なんか味気ないし1行じゃ意味ない感じでさあ。
0945nobodyさん2006/05/30(火) 22:20:42ID:???
何のテストなのかがよくわからないけど、
>>943みたいなのとか、環境変数を全部吐くのとか、
「とりあえず動くことの確認」みたいなサンプルだったら、そういうのでいいのでは?

「いや、そうじゃなくて、こう、なんていうか、アレだよアレ」な場合(?)は
「エラストテネスのふるい」でぐぐるなり何なり。
0946nobodyさん2006/05/31(水) 01:06:18ID:8kzUocWY
>>921です。
昨日の質問の続きなんですけど、ずっとわたしひとりで考えても分からなかったので教えてください(P口`q。)".
昨日聞いたものをsub readとして、下のどこかで&readしてHTMLに表示させたいんですけどどうしてもできません・゚・(PД`q)・゚

sub print{
local($jump_url);
if($EST{rank_fl}){
$jump_url=$Slog[2];
$jump_url=~s/(\W)/'%' . unpack('H2',$1)/eg;
$jump_url="$EST{cgi_path_url}$EST{rank}?mode=link&id=$Slog[0]&url=$jump_url";
}
else{$jump_url=$Slog[2];}

print<<"<!--HTML-->";
<!-- ログ\表\示 -->
<hr size=1 color=black>
<strong>[IN $in_pt][OUT $out_pt]</strong><br>
<a href="$jump_url"><b>$Slog[1]</b></a>
<br>
<!--HTML-->
print<<"<!--HTML-->";
$Slog[6]<br>
<!--HTML-->
}
foreach $line(@log_lines){
@Slog=split(/<>/,$line);
&print;
}

訪問ランキングスクリプトです。意味が分からなかったらファイルをお渡しします。 よろしくお願いしますm(*u_u)m
0947nobodyさん2006/05/31(水) 01:19:05ID:???
よくわからんが、カンで答えると、
「@log_lines」 がファイルの中身なら、
「foreach $line (@log_lines) {」
の前で 「&read」 ?でソートさせにいけばいいんじゃない?
それでもできないなら、上で答えてくれたソースをその 「&read」 でどう改造して使ってるかによるな。
0948nobodyさん2006/05/31(水) 01:21:31ID:8kzUocWY
具体的には、
sub read の中で、file.txt というファイルを読み込んで
1,あいうえお,0-1-8
2,かきくけこ,1-3-2
3,さしすせそ,1-9-4

この3列目の ○-△-□ の △ の数が多い順に行をsortして、
その行の2列目を@log_lines に格納する準備をしておいて
その後のsub print の中で@log_lines を利用してHTMLに吐き出すという事がしたいのですが
見ての通りsub print はテンプレート化したもので、sub read はcgiファイルなので別々のものを
うまく組み合わせるのに困っています(u_`u。)

sub read はlocal関数を使って、後々問題にならないようにしてみたりしたのですが
実際に起動させて見るとどれもうまくいきませんでした。....ρ(。 。、 )
ちからを貸していただけませんか?(*u_u)☆
0949nobodyさん2006/05/31(水) 01:43:02ID:8kzUocWY
>>946さん
お返事ありがとうございます゚+.(・∀・)゚+.゚+.゚
いろいろ試してみてたのでめちゃくちゃになってるんですが貼ってみます。

sub read{
$file="file.txt";
@log_lines=(); #表示データリスト
%Clog=(); #各カテゴリの登録数

local(@temp_lines,%temp_ref,$line,@kt,$kt,@Slog,$st_no,$end_no,$i=0,$j=0,@data,$IN_count);
$end_no=$EST{hyouji}*$LC_page -1;
$st_no=$end_no - $EST{hyouji} +1;

open(IN,"$file");
while($line=<IN>){
chomp();
@Slog=split(/<>/,$line);## $Slog[13] = 0_0_0_0, $Slog[2] = URL
@IN_count=(split(/_/,$Slog[13]))[2];
push(@data,{url => $Slog[2], IN_count => $IN_count});
$Clog++;
}
close(IN);
@data = sort{$b -> {IN_count} <=> $a ->{IN_count}} @data;
#foreach $kt(@kt){
#if($LC_kt eq $kt){
#$temp_ref{$Slog[0]}=$i;
#push(@temp_lines,$line);
#$i++;
#}
#$Clog{$kt}++;
#}
close(IN);
0950nobodyさん2006/05/31(水) 01:44:30ID:8kzUocWY
>>947さん、間違えてしまいました(>_<)すみません!


#foreach $line(sort{$b <=> $a}(keys %temp_ref)){
foreach(@data){
if($st_no<=$j && $j<=$end_no){
#push(@log_lines,$temp_lines[$temp_ref{$line}]);
push(@log_lines,$data[$j]});
}
$j++;
#}
#undef(@temp_lines); undef(%temp_ref);
}
お兄ちゃんみたいで頼りにしてます(ο^v^ο)
よろしくお願いしますo(*u_u)o
0951nobodyさん2006/05/31(水) 01:48:45ID:???
どっかにソースをまとめてうpしる
0952nobodyさん2006/05/31(水) 02:05:27ID:8kzUocWY
>>951さん
まとめてうpしるって、まとめてアップしろってことですか?
良く分からなくてすみません!(>_<)
0953nobodyさん2006/05/31(水) 02:09:40ID:???
> 見ての通り sub print はテンプレート化したもので、sub read はcgiファイルなので別々のものをうまく組み合わせるのに困っています

ここが理解できないのはうちだけ?
テンプレート化って何 テンプレート化って。

どういう流れなのかいまいちわからないなあw
0954nobodyさん2006/05/31(水) 02:20:28ID:8kzUocWY
>>951さん
アップローダーを見つけてアップしてきました。
http://tool-ya.ddo.jp/webfs/~enigma
の中にあります。コメントによろしくお願いしますと書いてます
0955nobodyさん2006/05/31(水) 02:22:01ID:8kzUocWY
>>953さん
sub print の方は、HTMLファイルになってるんです。
sub read の方は、CGIファイルです!
0956nobodyさん2006/05/31(水) 02:28:01ID:8kzUocWY
http://tool-ya.ddo.jp/webfs/~enigma
のDLパスは1234です!
0957nobodyさん2006/05/31(水) 02:48:53ID:???
落としてみたけど、sub read なんてないなw sub open_in_new かw
>>955 は拡張子はHTMLファイルだけど、require できる普通のperl形式だったね。
かなりルーズに書いてるから、別ファイルだから受け渡しできない〜、とかそういうことはないと思うぞ。

件とは関係ないかもだけど 178行目
push(@log_lines,$data[$j]});
なってエラーでる。
push(@log_lines,$data[$j]);
こうじゃね。
しかもこれ直してもまだカッコ閉じられてない風なエラーでて しかもどこだかわからないw
動くファイルあげてw

0958nobodyさん2006/05/31(水) 02:51:27ID:???
って、すぐ近くにあったw

181行目
#}

}

もっとがんがれー ( ´Д`)
0959nobodyさん2006/05/31(水) 03:02:45ID:8kzUocWY
>>957-958さん
落として見てくれたんですね(*^_^*)♪
ありがとうございます!

なんでそんなに早く分かるんですか!?
しかも、書いてもらってるのに
>件とは関係ないかもだけど 178行目
>push(@log_lines,$data[$j]});
>なってエラーでる。
>push(@log_lines,$data[$j]);
の2行目と4行目の区別がわかりません。....ρ(。 。、 ) 全く同じに見えます。。。

でもほんとにほんとに、なんで見ただけですぐ分かっちゃうんですか??!!
0960nobodyさん2006/05/31(水) 03:07:08ID:8kzUocWY
ああ〜〜っΩ(*'〇^*)Ω
わかっちゃいましたぁ☆
} が付いてたのが余計だったんですね!

ホントに何でそんなに早く分かるんですか???
0961nobodyさん2006/05/31(水) 03:27:09ID:8kzUocWY
>>957-958さん♪
できましたぁ〜☆+゚ヽ(^◇^◎)/

って言ってもエラーが取れただけでランキングは、正しく表示されていませんでした^^;
ファイルの中身を読んで、昨日言われたとおりに書いたつもりなんですけど
CGIの方のファイルを見てると、該当するカテ用のログを読んで、
その中のデータを「IN」が多い順にソートして、それから
1ページ分に表示させる分だけ@log_lines に入れてますよね? 解釈も記述も合ってますよね?^^;

HTMLの方では、@log_lines から <> を除いて@Slog に入れてから&print をしてますよね?
そこでは、1ページ分だけのデータが入ってる@Slog のURL部分をいじっておしまいなのに
画面で確認すると、INの降順じゃないんです。。。
しかも、@Slogを直接表示させるとやっぱりINの降順にそーとされてないデータが出てくるんです。  ( ´Д`)なんでー
0962nobodyさん2006/05/31(水) 03:37:25ID:???
誉められてるんだかけなされてるんだかわからなくなってきたとです・・・。 orz
エラーはエラー文に行数でてればすぐわかるんだけどw

っていうかスクリプトはルートわからんかぎり見当つかないな。確かめられないのでなんとも。
@log_lines より先に、ソートする open_in_new (?) を呼べばいいとしか答えられないや。

>>948で言ってた sub print が sub PRlog に当たってるんだろうか?
その中で local(@log_lines); こうやってるけど、これはいいんだっけ? 消したほうが・・・。

・・・

あー、もしかして、

@IN_count=(split(/_/,$Slog[13]))[2];

$IN_count=(split(/_/,$Slog[13]))[2];

こうじゃね?w
0963nobodyさん2006/05/31(水) 03:42:39ID:???
ここはやけにハイテンションな顔文字が多いインターネッツですね
0964nobodyさん2006/05/31(水) 03:51:05ID:8kzUocWY
>>962さん♪
誉めるっていうより、絶賛ですょ〜w(*・o・*)w オォォ

最近PC買ったんでついつい面白くていろんなことやり出したら止まらなくて^^;
けど掲示板って思ったより時間が掛かるから、すぐ聞けてわたしもすぐ答えられるようなものあったらいいのになぁ♪

>@log_lines より先に、ソートする open_in_new(?) を呼べばいいとしか答えられないや。
早速実践してみます!

>sub print が sub PRlog に当たってるんだろうか?
そうです^^

>local(@log_lines); こうやってるけど、これはいいんだっけ? 消したほうが・・・。
消しましたぁ☆

>@IN_count=(split(/_/,$Slog[13]))[2];
>↓
>$IN_count=(split(/_/,$Slog[13]))[2];
>こうじゃね?w
やってみましたが、結果は同じでした。。。(。_。*)

プログラムって難しいですねぇ^^;
先生に少し習ったくらいだから、わたし全然だめですよne...
0965nobodyさん2006/05/31(水) 03:52:24ID:8kzUocWY
>>963さん
こんばんゎぁぁ 猫(゚ロ゚L)
遅くまで起きてるんですねぇ^^♪
0966nobodyさん2006/05/31(水) 03:55:14ID:???
福岡県在住のねーちゃんの懸賞サイト作りにタダ働きさせられてて(´・ω・) カワイソス
レス数が950を超えています。1000を超えると書き込みができなくなります。