WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:複数データの読み込み

0:[投稿] CX5 [MAIL] [2002/04/25 00:35 ][環境:WIN+IE UNIX系+Perl]

 はじめまして。大変参考にさせて頂いています。

 掲示板CGIの複数のログDATAファイルを、繋げて表示や検索の処理がしたいのですが、

sub ReadFile {
    local($file) = @_;
    local(@lines);
    if (!open(IN,$file)) { &Error('<ul><li>ログが見つかりません。</li></ul>'); }
    @lines = <IN>;
    close(IN);
    return @lines;
}

に、何を書き加えれば良いでしょうか?
ご教授お願いします。


1:[回答] ヨシミ [2002/04/25 19:35 ]

open したのを @data1, @data2 に入れたとすると
@data3 = (@data1,@data2);
で一緒になるかと。
1 と 2 の順番は内容によって逆になるかもしれません。

ちなみに、直接関係ないですが、配列 @datan に大きな値が入ると、それだけでメモリエラーを出すISPサーバも多いので注意。

具体的には 5M くらいで既にダメだったりすることも。
最低限のデータしか読ませないような工夫が優しいかと。


2:[質問] CX5 [MAIL] [2002/04/25 22:52 ]

To ヨシミ様
 回答ありがとうございます。
ログを指定して開くタイプのCGIで、悩んでいましたが
試行錯誤の結果、うまく読めるようになりました。

>最低限のデータしか読ませないような工夫が優しいかと。
 便乗質問ですが、
最初はDATA1だけを読み、要求があったときに必要に応じてDATA2を読むといった具合でしょうか?
具体的にどのような案件があるかお教えいただけると幸いです。

(現在のDATAは1MB強。利用法はデータベースです。)


3:[回答] ヨシミ [2002/04/26 09:53 ]

50件ずつ表示、なんていう場合には50件ずつログを切り出すとかそういうことです。
ファイルを全部読み出して、その中で50件まで・・・よりも負担が減るかと。

また、スクリプトがどういう使われ方をするかによって、ログの記録形式そのものを、前述のように切り出しやすいフォーマットに最適化しておくのもよいでしょう。
たとえば投稿者のホスト名やUA情報を表示しないが記録する、なんていう場合は、記事情報とは別途データファイルを設ける方がいいかもしれません。

データベースの場合は、重複項目をなるべく避け、キーのみでリレーションさせるのが基本です。が、そもそも Perl がデータベースの扱いに向いているのかは疑問です。


4:[回答] ふじ [URL] [2002/04/26 15:51 ]

ファイルをすべて配列に読み込まなくてはできないこと、てのはそうないはずです。
一行ずつ読んで処理していけば大抵の処理はできます。
# テキストファイルのデータベースに対して検索、更新、削除、挿入、は
# すべて一行ずつ読むことで可能ですし。

(サーバの環境にもよりますが、)数MBほどの大きさのデータを一度に読み込むのは
あまり賢い処理とはいえないかと。

ところで、
> が、そもそも Perl がデータベースの扱いに向いているのかは疑問です。
この理由、お教え願えますか? >ヨシミさん

RDBとの連携なら DBI+DBD というよくできた仕組みがありますし、
http://search.cpan.org/search?mode=module&query=DBD

自前でテキストファイルをデータベースとして扱うにも、文字列処理が柔軟な
Perlは、結構楽ができると思うのですが。
# 速度の問題はあるでしょうけど。


5:[回答] ヨシミ [2002/04/26 16:03 ]

>>4
データベースソフト(といっても色々ありますが)を用いた方が早いし、データも小さく圧縮できることが多いので。
Perl はテキスト処理にとても便利ですが、大量なデータになるとデータをテキストで持っていることがネックになることもあると思っております。
ただそう思っているだけですので実際のところはよく分かっていない。だから疑問(識者の方への問いかけ)としました。


6:[完了] CX5 [MAIL] [2002/04/27 08:27 ]

ふじ様、ヨシミ様 ご回答ありがとうございました。

一行ずつ処理するようにしました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World