• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:一定数を越えたら自動的に削除するには・・)

一定数を越えたら自動的に削除するには・・

このQ&Aのポイント
  • CGIにログ機能をつけようと思い、以下の(1)のように書き加えたことでログを取得し記録することはできたのですがこのままではログの記事記録数が増え続けていく一方であるため、記事数を5000までとし、古い記録から自動的に削除するようにしたいと思っています。
  • さまざまなサイトで調べた結果(2)のようにすると一定数を越えた場合、順番に削除できるようなのですがうまくいきません。
  • どのように記述したらいいのか教えていただけませんか?どうかよろしくお願いいたします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あ~, 端的にいえばその通りです. お気を悪くされたのなら申し訳ありません. つまり, (1) では date/log.txt というファイルにログを保存しているんですが, (2) では @lines という配列にデータを置いていることを想定しています. だから, ファイルと配列との間で適宜データをやり取りしないとだめなんだけど, その辺はちゃんとプログラムにあるのかなぁと気になったので. date/log.txt の中身は知りませんが, 「1行に 1個のデータ」という形なら 1.date/log.txt から @lines に読み込み 2.@lines に新しい記事を追加する 3.@lines が大きすぎたら (2) のように減らして 4.date/log.txt に @lines の内容を書き戻す のような処理が必要だと思います. また, (2) で pop してますが, これは「古い記事ほど配列の後ろ (添え字の大きいところ) にある」という形でデータをもつ必要があります. ここも注意が必要ですね. この順にデータをもつなら unshift/pop を使うことになります. 逆順なら push/shift. あと蛇足なんだけど, ディレクトリの名前は「date」でいい? ひょっとして「data」だったりしませんか?

masa-25
質問者

お礼

気を悪くするなんてとんでもありません!! 逆に深くお礼を申し上げたいくらいでした。 実はレスをいただいたことで、ヒントをいただきまして 初心者だものでさらに基本から勉強しなおそうと push shift unshift popなどについて勉強しました。 その中で、Toacosanがこのレスでご指摘の過程に気づき、 すべてを書きなおし、また1から作りなおしたところ、 ログに記録することも、指定した数まで記録し、 それ以降は古い記事を配列の前から削除していくこともできました。 またdateはdataの表記し間違えでした。 ご迷惑をおかけいたしました。 また、1から勉強しなおすきっかけとヒント、ありがとうございました!!

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

date/log.txt の内容を変えないとお話にならない. そのことと (2) の関連は大丈夫ですか? ちなみに push, pop, unshift, shift の区別はできてますか?

masa-25
質問者

お礼

大丈夫じゃないと思うからこのようにご指摘いただいているのですよね? そうでなかればこのような書き方はされないと思いますので。 勉強させていただきます。 ご指摘ありがとうございます。

関連するQ&A