CGI-BBS > データベース > 簡易データベース > 簡易データベースで複数のcsvを読み込みたい


カレッヂ
カレッヂ


質問者 ayu  投稿日 2/15(木) 23:31:37
はじめまして
簡易データベースv2.1を利用しています。
題名の通り、複数のcsvファイルから検索・表示したいのですがどうすればいいのかわかりません。常時ユーザーが更新するためcsvを1つにまとめることは出来ません。よろしくお願いいたします。
回答者 羊相談員  [削除]  投稿日 2/22(木) 22:42:00
簡易データベースの仕様上(1ページに表示する件数が限られている)難しいです。
1ページにすべて表示するのならそんなに難しくはないですが。
質問者 ayu  [削除]  投稿日 2/23(金) 00:29:26
羊相談員  様 ご回答ありがとうございます。
次の$page件 で探しに行くときに問題があるのですね。
例えば「検索」を実行する直前に、ディレクトリにあるdataファイル(.csv)を1つに結合するようなスクリプトがあればいいのですが、その様な事は可能でしょうか?
csvファイルの数は変動しますので、ディレクトリを前もって決めておいてその中のファイルを1つのファイルにするようなヒントがあればご教授お願いいたします。
回答者 羊相談員  [削除]  投稿日 2/23(金) 08:36:21
改めて簡易データベースのソースを見直してみたら
無駄な処理を行っているのが幸いして
そんなに難しくなさそうです。

if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); }
@BASE = <IN>;
close(IN);

この処理の後で別のファイルをオープンして@BASEに追加してやればできると思います。
質問者 ayu  [削除]  投稿日 2/24(土) 00:30:38
羊相談員  様 ご回答ありがとうございました。
教えていただきました様に追加して、複数のファイルから検索できました!!
誠にあつかましいのですがもう一つだけお願いいたします。
「*.csv」みたいなワイルドカードはcgiでは無理なのでしょうか?
もし使えたら、csvの追加時に毎回スクリプトを替えずに済むのですが如何でしょうか、
よろしくお願いいたします。
回答者 羊相談員  [削除]  投稿日 2/24(土) 11:46:26
ディレクトリ内のファイルを検索するプログラムと
正規表現をうまく組み合わせればできるかと思いますが
両方ともわからないので手も足も出ません。
だれかたすけて―。
質問者 ayu  [削除]  投稿日 2/24(土) 21:43:08
羊相談員 様 ありがとうございます。
>ディレクトリ内のファイルを検索するプログラム  
@files = glob("./*.csv"); で良いのでしょうか?
@files に入ったデータを $file に置き替えていく方法がわかりません。
cgiは勉強中なので、とんでもないことを言っているかも知れませんのでご了承下さい。
正規表現については本を読んで、もう少し勉強してみます。

参考になるかわかりませんが、ファイル名は全て半角英小文字3−8文字です。
質問者 ayu  [削除]  投稿日 3/7(水) 00:02:25
訂正です
投稿日 2/24(土) 00:30:38 投稿分勘違いで最後のcsvしか検索しませんでした。

自分なりに考えたのですが、どうしてもわからないのでお願いいたします。
#データベースファイル
@files = glob("*.csv");   としてディレクトリ内の全てのcsvを@filesに

#■検索処理
foreach $file (@files) {
if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); }
@BASE = <IN>;
close(IN);
}

検索処理で上記のforeach分で繰り返し@BASEに代入したいのですが、最後のcsvしか入りません
<IN>の前に >> を付けたらエラーになります。
全てのcsvを@BASEに入れる方法を教えてください。
回答者 羊相談員  [削除]  投稿日 3/7(水) 10:39:02
配列に要素を追加する場合はpush関数を使います。
質問者 ayu  [削除]  投稿日 3/7(水) 13:05:26
羊相談員 様 何度もありがとうございます
push関数はわかっていたのですが、今一使い方がわからなくて他の事ばかり試してました。
羊相談員 様のアドバイスがあったので、もう一度pushについて試したところうまく行きました。
大変お世話になりました。
この質問をこれで終了いたします。
またお世話になるかも知れませんが、その時はよろしくお願いいたします。

このページは終了したので返信(回答)は書きこめません

Web裏技