題名を取り出す方法は?
[上に]
[前に]
[次に]
矢部くん
1999/05/11(火) 09:03:17
05月10日(月)12時02分33秒,投稿者,メール,コメント,題名,
というふうにログに記録されているので、ここから題名だけを取り出すために
#!/usr/bin/perl
$subjectfile = './bbs.dat';
($date,$fname,$email,$value,$subject,$res,$cnt) = split(/,/,$subjectfile);
print "$subject\n";
と書いてsubject.plという名前にしてSSIで呼び出してみたのですが、
正常に動いていないようなのです。
妙にスクリプトが短いので、何か肝心な記述が抜けているのでしょうか・・?
Syn
[E-Mail]
1999/05/11(火) 10:43:37
で その bbs.dat はいつ読み出すんでしょう?(^^;
それがスクリプトの全文だとすると './bbs.dat' とゆう文字列を
split することになりますが (しかも , はないから split は
されない) …。
すくなくとも
o ファイルのオープン
o 内容の読み出し
が必要ですヨ。
open(DATA,$subjectfile);
@data = <DATA>;
close(DATA);
foreach (@data) {
($date,$fname,$email,$value,$subject,$res,$cnt) = split(/,/,$_);
print "$subject\n";
}
矢部くん
1999/05/11(火) 12:02:52
お返事ありがとうございます。
読み出しが必要なんですね。早速やってみたらうまくいきました。
ただ、これだと題名がいっぱい出て来ちゃうので
20個だけにしたいと思いました。
そこでいろいろ調べてみて
for ($i=0; $i<19; $i++)
を入れたらいいかなと思ったんですがどこにいれたらいいのか
わかりませんでした・・・。
Syn
[E-Mail]
1999/05/11(火) 12:12:55
ふむふむ。
ファイルの先頭から 20 件分でよいのでしたら
for ($i=0; $i<19; $i++)
が使えます。
@data 配列の添字を 0 〜 19 まで表示すればいいわけですので
for ($i=0; $i<19; $i++) {
($date,$fname,$email,$value,$subject,$res,$cnt) = split(/,/,@data[$i]); # @data[$i]; の部分がキモ
print "$subject\n";
}
こんなカンジでどうでしょうか。
なえ
1999/05/11(火) 12:48:59
open(DATA,$subjectfile);
@data = <DATA>;
close(DATA);
これだとファイルのデータを一度に全部読みにいっちゃうので、
ファイルサイズが大きくなるとメモリ食いまくりますよ。
open(DATA,$subjectfile);
while (<DATA>){
chomp;
($date,$fname,$email,$value,$subject,$res,$cnt) = split(/,/);
print "$subject\n";
last if ++$i>=20;
}
close(DATA);
こんな感じに一行ずつ読むようにしましょう。
矢部くん
1999/05/11(火) 15:36:21
みなさんお返事ありがとうございます。
#!/usr/bin/perl
$subjectfile = './bbs.dat';
open(DATA,$subjectfile);
while (<DATA>){
chomp;
($date,$fname,$email,$value,$subject,$res,$cnt) = split(/,/);
print "$subject\n";
last if ++$i>=20;
}
close(DATA);
と書かせてもらったのですが、どうも動いてないみたいなのです。
前の、記事の題名を全部表示するスクリプトは動いているので
もしかしたらエラー出しているんでしょうか・・。。
なえ
1999/05/11(火) 15:46:16
もしかしてPerlのバージョンが4なのでしょうか?
だとしたらchompではなくchopにしてください。
それから私の書き込んだ文をそのままカット&ペーストしてませんか?
whileループの中の字下げに全角スペースを使いましたが(この掲示板では行頭の半角スペースが取り除かれちゃうから)、
実際はタブか半角スペースにしてくださいね。
矢部くん
1999/05/11(火) 15:59:56
[[解決]]
ありがとうございます
書き直したら無事動き出しました。
それでは「済」印を。ぺたん。
[上に]
[前に]
[次に]