掲示板で、投稿数が多くなりすぎないように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,メアド
とどんどんどんどんずれていってしまいます…。どうにかならないものでしょうか?
質問がわかりづらいかもしれないですがどうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
いろんな方法が考えられますが、
一番感覚的に分かりやすい方法を・・・
$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して出た分ずつ過去ログファイルに追加書き込み。。。とも出来るかと思います。
細かい処理にはふれないでおきます。
あくまで参考程度に。
No.1
- 回答日時:
$lineの中がどのようになっているのかわからないので回答が難しいのですが、一旦ブラウザに配列の中身を吐き出してデバッグしてみてはいかがでしょう?
それから、ついでのおせっかいなのですが、
せっかく$iを使ってか数をカウントされているので
push (@old,$line);
↓
$old[$i] = $line;
とされてはどうでしょう?
それから
if($i eq $cutnum){last;} は
if($i > $cutnum) {last;}の方が安全ですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excel2019と365、2021 2 2023/07/08 06:22
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 事件・犯罪 サイバー犯罪に巻き込まれたらしい 1 2022/08/12 00:31
- PHP PHP ページング データベース 1 2022/06/16 10:30
- 教育・文化 2004年世代が一番可哀想です 2 2022/10/24 20:58
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- 訴訟・裁判 2ちゃんねるの歴史 からして 認証システム は必要ですか? 1 2022/10/09 05:39
- サッカー・フットサル 北海道コンサドーレ札幌のアウェイの話 1 2022/11/01 00:00
- Excel(エクセル) エクセルの関数がわかりません 4 2022/06/03 17:44
- Excel(エクセル) エクセル 5 2023/02/24 09:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エクセルで1列で表示したい。
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
Excel 1セル当りの文字数が2...
-
バイナリとBCDコード
-
Excel VBA メール作成について ...
-
stable diffusionのエラー
-
char str[256]の256の意味は?
-
CGIを勉強しています。¥n(改...
-
COBOL PICTUREで X,S,Vの意味
-
C言語の構造体にてバブルソート...
-
ESC/Pのテキスト印字の制...
-
ビットデータのチェック方法
-
DataGridViewの特定列に入力さ...
-
改行コードがそのまま表示され...
-
日付時刻を4バイトに
-
デバイスコンテキストに書いた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エクセルで1列で表示したい。
-
matlabで、平均値を求める方法...
-
MATLAB(マトラボ)とcsvファ...
-
文字型変数を使って2進数表示す...
-
いつどこゲームのようなテキス...
-
VBScripの2次元動的配列
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
Excel VBA メール作成について ...
-
stable diffusionのエラー
-
DataGridViewの特定列に入力さ...
-
エクセルシート名の制限を変更...
-
なんでブラウザでPHPを動かすた...
-
COBOLのCOMP形式について
-
ポインター引数の関数でコンパ...
-
char str[256]の256の意味は?
-
メールの件名をデコードしたい
-
バイナリとBCDコード
-
Excel 1セル当りの文字数が2...
-
異なるドメインのサイトでcooki...
おすすめ情報