過去の桐井戸端BBS (桐ver.8)
7193 桐Grep再び(表データ) 悲しげ 2000/08/17-00:58
本文はKHさんの#7181へのコメントでもあるのですが、
(#7132桐8sp6βテスタ募集のご案内 記事内)
別件であるためツリーを独立させました。

> さらに虫のいいお願いを申し上げますが、V5のときの一括処理
>を松文書に書き出し、桐から松文書検索して複数の一括処理からあ
>る特定の変数や文字が使われている一括処理ファイルを選び出す事
>など、桐の世界(またはK3)の中だけでは出来ないのでしょうね。
>変な事を書いて申し訳ありません。あまりに「CMDの不要変数チ
>ェック 一括処理」がV5のコンバートをしている私にとって感動
>的だったものですから聞き流してください。失礼しました。

cmdのGrepですね。
類似のこととして、桐表Grep.cmdが次の過去ログにあります。

http://www.fuku3.com/~habata/kbbs/kakov7/05990.htm

ただし、これは検索時の項目名を数値型変数で指定できることを知らなかったために「コマンド」コマンドを
使っていましたから、この機会に、もっとシンプルに書き換えることにします。(^^)v

*--------------- 桐表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",追加,終了状態=&終了
     繰り返し
      検索 ∨,&i{*&検索文字列*}
      条件(#EOF) 繰り返し中止
      &行番=#行番号,&値=#項目属性(&i,0)
      印字 &tbl,"ψ",&項目,"ψ",&行番,"ψ",&値
     繰り返し終了
    印字終了
   ケース終了
   &i=&i+1
  繰り返し終了
  終了 表 編集対象表
 繰り返し終了
end
*-------------------- End Of Cmd ----------------------

次稿ではこれのcmdへの応用に挑戦します。(^^;)
7194 桐Grep(一括処理) 悲しげ 2000/08/17-01:00
記事番号7193へのコメント
今度は一括処理のGrepです。(^^;)

*--------------- 一括Grep.cmd (C)悲しげ ---------------
変数宣言 文字列{&cmd,&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",区切り="ψ",終了状態=&終了,*
 表形式編集 ガイド="結果確認"
ケース その他
 確認 "検索文字列を含むcmdはありませんでした"
ケース終了
ファイル削除 "桐表Grep.txt"
終了

proc 検索実行()
 繰り返し
  ファイル名入力 初期値="*.cmd"\
   ,プロンプト="検索実行するcmdでクリック、終了は[キャンセル]ボタン",&cmd
  条件(&cmd="") 繰り返し中止
  &tbl=#s(&cmd,".","_")+".tbl"
  ファイル複写 &cmd,&tbl
  表 &tbl
  表表示
  ジャンプ 行番号=1
  印字開始 "桐表Grep.txt",追加,終了状態=&終了
   繰り返し
    検索 ∨,[処理]{*&検索文字列*}
    条件(#EOF) 繰り返し中止
    &行番=#行番号,&値=[処理]
    印字 &cmd,"ψ","処理","ψ",&行番,"ψ",&値
   繰り返し終了
  印字終了
  繰り返し終了
  終了 表 編集対象表
  ファイル削除 &tbl
 繰り返し終了
end
*-------------------- End Of Cmd ----------------------

但しこのcmdの方は挙動未確認。
KHさん、バグ出しして下さい。(^^;)
7203 Re:桐Grep(一括処理) KH 2000/08/17-11:38
記事番号7194へのコメント
>*--------------- 一括Grep.cmd (C)悲しげ ---------------
>・
>・省略
>・
>
>proc 検索実行()
> 繰り返し
>  ファイル名入力 初期値="*.cmd"\
>   ,プロンプト="検索実行するcmdでクリック、終了は[キャンセル]ボタン",&cmd
>  条件(&cmd="") 繰り返し中止
>  &tbl=#s(&cmd,".","_")+".tbl"
>  ファイル複写 &cmd,&tbl
>  表 &tbl
>  表表示
>  ジャンプ 行番号=1
>  印字開始 "桐表Grep.txt",追加,終了状態=&終了
>   繰り返し
>    検索 ∨,[処理]{*&検索文字列*}
>    条件(#EOF) 繰り返し中止
>    &行番=#行番号,&値=[処理]
>    印字 &cmd,"ψ","処理","ψ",&行番,"ψ",&値
>   繰り返し終了
>  印字終了
>  繰り返し終了
>  終了 表 編集対象表
>  ファイル削除 &tbl
>* 繰り返し終了
>end
>*-------------------- End Of Cmd ----------------------
>
>但しこのcmdの方は挙動未確認。
>KHさん、バグ出しして下さい。(^^;)

 本当に有難うございます。表の方からわざわざコンバートしていただいて、お手数をおかけました。
ご愛嬌でしょうけど、繰り返し終了が1つコンバート後残っていました。
*部分です。これを元ににして使用させていただきたいとおもいますがよろしいでしょうか。
また私なりにアレンジなどする場合、わからないことが沢山出てくると思いますがよろしくお願いします。
お礼まで。

7205 Re:桐Grep(一括処理データの) 悲しげ 2000/08/17-12:05
記事番号7203へのコメント
どもっ、KHさん、やはりバグってましたか。(^^;)
でも「*」を付けるところは違ってますね。

>  印字終了
>  繰り返し終了
>  終了 表 編集対象表
>  ファイル削除 &tbl
>* 繰り返し終了
>end

ではなく

>  印字終了
>*  繰り返し終了
>  終了 表 編集対象表
>  ファイル削除 &tbl
> 繰り返し終了
>end

が正しいはずです。
7217 Re:桐Grep(一括処理データの) KH 2000/08/17-21:17
記事番号7205へのコメント
>でも「*」を付けるところは違ってますね。
>
>>  印字終了
>>*  繰り返し終了
>>  終了 表 編集対象表
>>  ファイル削除 &tbl
>> 繰り返し終了
>>end
>
>が正しいはずです。

 よく分からなくて済みませんでした。
このプログラムの置いたフォルダのすべてのコマンドファイルを調べたくて、
プログラムを直そうと頭がいっぱいでしたが、何とかできたようです。

実は、proc 検索実行()・・・end の部分が全く分からなくて、
一般的な手続き分に変更し、つぎはぎだらけのラーメン状態になりました。
動いたかなと思ったら、自分自身をチェックしようとして止まり、その処理がやっと出来たのでありました。
利用者コードの問題と制御文字を含んだ行をチェックした場合がtbl名(cmdファイル名)にコマンドが現れことがありますが、
大勢に影響はありません。
お蔭様で桐V5のときのように多数のcmdから特定の文字列を含むファイルを一挙に探すことが出来るようになりました。
cmd不要変数のチェックといい本当にお世話になりました。

今後ともよろしくお願いします。

戻る