過去の桐井戸端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」を用意して下さい。"

他は確認不能。(^^;)

戻る