OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

push命令って…

  • すぐに回答を!
  • 質問No.219734
  • 閲覧数54
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 37% (3/8)

掲示板で、投稿数が多くなりすぎないように1ページに表示される数を制限して(例えば30件だけ)それ以上の件数になったら隅のほうにでも「1/2/3/次のページ/」などと表示して前のログを見れるようにしたいと思いそのようなのを作っているんですが何度やってもうまくいきません…。よろしければヒントなどをいただきたいと思います。
と、本題が遅れましたが…。

$cutnum=$cnt - $max; #切り取る数を指定
$i=0;
foreach $line (@all){
push (@old,$line); #→例えばanswer.datのログを読み上の行から読み取り。
$i++;
if($i eq $cutnum){last;} #→@allから$cutnum個のデータを読み取ったら抜ける
}
open (Old,">bbs1.dat");
print Old @old;
close (Old);

として、表示される最大数からあふれたのをひとつずつ過去ログとして保存するようにしたんですが、bbs1.dat には
投稿数を増やしていくと
5,2002年2月17日,Ryo,メアド
 4,2002年2月17日,Ryo,メアド
  3.2002年2月17日,Ryo,メアド
   2,2002年2月17日,Ryo,メアド
    1,2002年2月17日,Ryo,メアド
とどんどんどんどんずれていってしまいます…。どうにかならないものでしょうか?
質問がわかりづらいかもしれないですがどうかよろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル7

ベストアンサー率 50% (2/4)

いろんな方法が考えられますが、
一番感覚的に分かりやすい方法を・・・

$max = 50; (例えば、最大50件とすると)
ここで、ファイルから読みとり、、、@linesに入れて、

foreach $no(0 .. $#lines){
if ($no >= $max){ push(@olds,$lines[$no])}
else { push(@now,$lines[$no])}
}
とすれば、最大件数までは、@nowに格納→BBS表示に使い、
それ以上の部分があれば、@oldsに格納→olds.datへ追加書き込み→これからの
読みとり&過去ログ表示は定番のやり方で。
とすればいけると思います。

そのほか、書き込みは一件ずつって事を考慮すれば、書き込み段階で
popして出た分ずつ過去ログファイルに追加書き込み。。。とも出来るかと思います。

細かい処理にはふれないでおきます。

あくまで参考程度に。
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 42% (103/245)

$lineの中がどのようになっているのかわからないので回答が難しいのですが、一旦ブラウザに配列の中身を吐き出してデバッグしてみてはいかがでしょう? それから、ついでのおせっかいなのですが、 せっかく$iを使ってか数をカウントされているので push (@old,$line); ↓ $old[$i] = $line; とされてはどうでしょう? それから if($i eq $cutnum) ...続きを読む
$lineの中がどのようになっているのかわからないので回答が難しいのですが、一旦ブラウザに配列の中身を吐き出してデバッグしてみてはいかがでしょう?

それから、ついでのおせっかいなのですが、
せっかく$iを使ってか数をカウントされているので
push (@old,$line);

$old[$i] = $line;
とされてはどうでしょう?
それから
if($i eq $cutnum){last;} は
if($i > $cutnum) {last;}の方が安全ですよね。


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ