題名を取り出す方法は?

[上に] [前に] [次に]
矢部くん 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
[[解決]]
ありがとうございます
書き直したら無事動き出しました。
それでは「済」印を。ぺたん。

[上に] [前に] [次に]