過去の桐井戸端BBS (桐ver.7) |
5990 | ファイルを越えた検索はできますか? | mimizu | 2000/05/11-10:01 |
最近あまり使ってなく、こちらもあまり訪問してないので、申し訳ありませんが、 もしなにか分ればと思ってお尋ねします。 今、Ver.7を使っていますが、これは各項目を指定してその中でのキーワード検索しかできないと思います。 項目を越えて1ファイルの中隅々からのキーワード検索、または、ファイルを越えて、あるフォルダの中から あるキーワードを含めたファイルを取り出すといったこと・・・ (テキストファイルのGrep検索みたいなものですね) (裏技も含めて)そういった方法はありますか? あるいはそういったソフトはありませんか? よろしくお願いします。 | |||
5992 | Re:ファイルを越えた検索はできますか? | tuji | 2000/05/11-11:35 |
記事番号5990へのコメント 同一ファイルの中だけなら, [あ][い][う][え][お]という項目があるとして, [か]という項目を追加し, 計算式に[あ]+[い]+[う]+[え]+[お] と設定し,[か]に対する検索をかけるという方法が一番安直です。 ファイルが異なると??ですが, 同じ事を繰り返すくらいしか思いつきません。 | |||
5993 | Re:ファイルを越えた検索はできますか? | 宮城 | 2000/05/11-11:37 |
記事番号5990へのコメント mimizuさん、こんにちは。 端的にいってできません。ただし、一括処理ではたいしたことはなく可能です。 ファイルの全項目につき、逐一なんらかのキーワード(たとえば「キーワード」を含むで絞り込みをかけ 該当を記録すればいいだけのこと。 それをあるフォルダのすべてについて行えばいいだけのことです。 ええと、項目数が少なくファイルが限られてるなら、表操作でできてしまいますね。 | |||
6005 | Re:ファイルを越えた検索はできますか? | 悲しげ | 2000/05/11-20:16 |
記事番号5990へのコメント 全項目検索用の一括処理を試作してみました。 あんまりエレガントじゃありませんけど。(^^;) 「検索」コマンドでは、項目名を変数で指定できないみたいですし、 1行ずつ #文字位置(#項目属性(&i,0),"検索文字列")>0 で判断すると超遅くなりそうなので、 邪道たる「コマンド」コマンドを使ってしまいました。(^^;) 当面、文字列に絞って、それ以外のデータ型はスキップしてます。 あと、高速化するために「印字」コマンドを使いました。 区切り文字は、データとして有り得ない文字と云う趣旨でギリシャ文字の"ψ"を使っていますが、 もしこれが有り得るとすれば、別途有り得ない文字で書き換えて下さい。 なお実行に先立って"全項検索.TBL"なる表を用意しておいて下さい。 項目構成はとりあえず [tbl名] [項目名] [行番号](長整数でなくても文字列型でも可) [項目値] としておきます。 *------------------ 全項目検索.CMD ----------------------- 変数宣言 文字列{&tbl,&項目,&検索文字列,&値}\ ,長整数{&i,&終了,&確認,&行番} ファイル削除 "kensaku.txt" キー入力 (1,1),プロンプト="検索文字列を入力([Esc]で終了)"\ ,終了状態=&終了,&検索文字列 条件(&終了=1 .and &検索文字列<>"") 手続き実行 検索実行() 確認 "検索結果を表示しますか?",&確認 ケース開始 ケース(&確認=1 .and #fsize("全項検索.TBL")>0) 表 "全項検索.TBL" /*項目構成は[tbl名][項目名][行番号][項目値]とする*/ 行削除 *,圧縮 読み込み テキスト,"kensaku.txt",区切り="ψ",終了状態=&終了,* 表形式編集 ガイド="結果確認" ケース終了 終了 proc 検索実行() 繰り返し ファイル名入力 初期値="*.tbl"\ ,プロンプト="検索する表でクリック",&tbl 条件(&tbl="") 繰り返し中止 表 &tbl 表表示 &i=1 繰り返し &項目=#項目属性(&i,1) /*項目名を取得*/ 条件(&項目="") 繰り返し中止 ケース開始 ケース(#項目属性(&i,2)="文字列") /*文字列型項目のみ実行*/ ジャンプ 行番号=1 印字開始 "kensaku.txt",追加,終了状態=&終了 繰り返し コマンド "検索 ∨,["+&項目+"]{*&検索文字列*}" 条件(#EOF) 繰り返し中止 &行番=#行番号,&値=#項目属性(&i,0) 印字 &tbl,"ψ",&項目,"ψ",&行番,"ψ",&値 繰り返し終了 印字終了 ケース終了 &i=&i+1 繰り返し終了 終了 表 編集対象表 繰り返し終了 end *---------------------- end of cmd ----------------------------- v8での挙動は確認済ですが、すいません、v7で未確認です。 | |||
6017 | Re:ファイルを越えた検索はできますか? | mimizu | 2000/05/12-03:36 |
記事番号5990へのコメント みなさん ありがとうございました。 悲しげさんには プログラムまで作って頂いて、驚きました。 ここは 凄いところですね 改めて感じました。 いろいろやってみたいと思います。 | |||
6020 | 桐Grep.cmd(改定版) | 悲しげ | 2000/05/12-10:38 |
記事番号6005へのコメント *--------------- 改訂版 桐表Grep.cmd (C)悲しげ --------------- 変数宣言 文字列{&tbl,&項目,&検索文字列,&値}\ ,長整数{&i,&終了,&確認,&行番} ケース開始 ケース(#fsize("桐表Grep.TBL")<1) メッセージボックス ""\ ,"検索結果読み込み表である「桐表Grep.TBL」を用意して下さい。"\ +"\n 項目構成は[tbl名]・[項目名]・[行番号]・[項目値]とします。"\ ,アイコン=!,制御文字展開=する 終了 ケース終了 ファイル削除 "桐表Grep.txt" キー入力 (1,1),プロンプト="検索文字列を入力([Esc]で終了)"\ ,終了状態=&終了,&検索文字列 条件(&終了=0 .or &検索文字列="") 終了 手続き実行 検索実行() ケース開始 ケース(#fsize("桐表Grep.txt")>0) 表 "桐表Grep.TBL" 行削除 *,圧縮 読み込み テキスト,"桐表Grep.txt",区切り="ψ",終了状態=&終了,* 表形式編集 ガイド="結果確認" ケース その他 確認 "検索文字列を含む表データはありませんでした" ケース終了 ファイル削除 "桐表Grep.txt" 終了 proc 検索実行() 繰り返し ファイル名入力 初期値="*.tbl"\ ,プロンプト="検索実行する表でクリック、終了は[キャンセル]ボタン",&tbl 条件(&tbl="") 繰り返し中止 表 &tbl 表表示 &i=1 繰り返し &項目=#項目属性(&i,1) /*項目名を取得*/ 条件(&項目="") 繰り返し中止 ケース開始 ケース(#項目属性(&i,2)="文字列") /*文字列型項目のみ実行*/ ジャンプ 行番号=1 印字開始 "桐表Grep.txt",追加,終了状態=&終了 繰り返し コマンド "検索 ∨,["+&項目+"]{*&検索文字列*}" 条件(#EOF) 繰り返し中止 &行番=#行番号,&値=#項目属性(&i,0) 印字 &tbl,"ψ",&項目,"ψ",&行番,"ψ",&値 繰り返し終了 印字終了 ケース終了 &i=&i+1 繰り返し終了 終了 表 編集対象表 繰り返し終了 end *----------------------- End Of Cmd ------------------------- | |||
6021 | 桐Grep.cmd(v7.*で使うには) | 悲しげ | 2000/05/12-14:11 |
記事番号6020へのコメント > メッセージボックス ""\ > ,"検索結果読み込み表である「桐表Grep.TBL」を用意して下さい。"\ > +"\n 項目構成は[tbl名]・[項目名]・[行番号]・[項目値]とします。"\ > ,アイコン=!,制御文字展開=する v7.*では「制御文字展開=する」のパラメータが無かったと記憶してます。 対応方法は、環境設定で指定する方法もあるのですが、一番簡単な方法は、 この部分を次のように書き換えることでしょうか。 確認 "検索結果読み込み表である「桐表Grep.TBL」を用意して下さい。" 他は確認不能。(^^;) |