-PR-
  • 困ってます
  • 質問No.3084501
解決
済み

splice()の使い方について教えて下さい

  • 閲覧数565
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 78% (136/173)

ホームページのカウンターで、アクセス解析をしたくてフリーのcgiカウンターに手を加えました。
そして、新しいログが、ファイルの先頭に来るよう下記のようにしました。

$tmp ="\nカウント : \[ $pcount \]\n日  時 : \[ $time \]\nホ ス ト : \[ $host \]\n\n";
open(DATA,"+<$logfile2") || &error;
@array = <DATA>;
@arr = splice(@array, 2030);
unshift @array, $tmp;
seek(DATA,0,0);
print DATA @array;
close(DATA);

以前、こちらのサイトで『新しいデータをファイルの先頭から表示させる方法』について質問させていただきました。
そして、unshift と seek を使った方法を教えていただきました。
ただ、データが多くなるとこの方法では、データが多くなると処理に時間がかかると教えて頂いた為、私は、ログが約90件を超えたら古いデータを消そうと思い、このようにしました。
しかし、『@arr = splice(@array, 2030);』この部分が良くないようで、データの一部が残ってしまうのです。

splice()の使い方について詳しく教えて下さい。
よろしくお願い致します。
  • 回答数2
  • 気になる数0

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

  • 回答No.2
レベル13

ベストアンサー率 62% (800/1280)

> spliceは、splice(対象配列、削除の開始位置)ではないのでしょうか?
splice は 1~4個の引数を取ります。
2個の場合はその通りですね。

で、配列の中身は期待通りになっているけれども、ファイルはそうじゃないのでは?
ということです。
つまり、ファイルポインタを先頭までまき戻して、そこから配列の内容を書き出しましたが、
ファイルのサイズは変わっていないので、仮に元のファイルのサイズが
書き出したサイズより大きければゴミが後ろにくっつくことになります。

で、そのサイズの調整をするのが truncateです。
spliceと同じく組み込み関数ですので、調べてみてください。
お礼コメント
kyonmimi2006

お礼率 78% (136/173)

sakusaker7さん、ありがとうございました。

seek(DATA,0,0);
truncate(DATA,70000);
print DATA @array;
close(DATA);

としたら、うまくいきました。
始めは、truncateの部分とprint部分を逆に書いていましたが、
それではうまくいかず、上記のようにしたところうまくいきました。

どうもありがとうございました。
投稿日時 - 2007-06-15 13:54:47
  • ありがとう数0
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 62% (800/1280)

90件を超えた分を消すというのと、spliceで指定している 2030という数字の関係がわかりません。 この2030の意味はなんですか? openした後の処理を見ると多分2030行ということなんでしょうけど。 あるいはファイルに書き出してからcloseする前に truncateを実行しとくとか。 ...続きを読む
90件を超えた分を消すというのと、spliceで指定している
2030という数字の関係がわかりません。
この2030の意味はなんですか?

openした後の処理を見ると多分2030行ということなんでしょうけど。

あるいはファイルに書き出してからcloseする前に
truncateを実行しとくとか。
補足コメント
kyonmimi2006

お礼率 78% (136/173)

sakusaker7さん、すみません。

90件ではなく、290件分でした。
$tmpに入れてあるデータが上記よりもう少しあり、7行分あるため、
2030としたのですが、2031行目以上のデータが、一部(一部の行の後半部分)が残っているのです。

spliceは、splice(対象配列、削除の開始位置)ではないのでしょうか?

truncateを実行とは?

ご指導、よろしくお願いします。
投稿日時 - 2007-06-14 19:05:11
  • ありがとう数0
  • 回答数2
  • 気になる数0
このQ&Aのテーマ
このQ&Aで解決しましたか?

関連するQ&A

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

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

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

特集


-PR-

ピックアップ

-PR-
ページ先頭へ