過去の桐井戸端BBS (桐ver.8)
13415 複数の一括処理ファイル定義を一気に文字置換する方法 小松亀一 2001/10/10-07:24
仙台の小松です。

次のような構造でメニューを作っています。

メインメニューの一括処理定義
ケース開始
ケース ( &メイン処理 = "A1" )
一括処理実行 "C:\CMD\業務日誌.CMD"
   *コマンドボタンのオブジェクト名"A1"が代入されることにより業務日誌.CMDスタート。

各個別メニューの内業務日誌.CMDの最初の定義
名札 業務日誌
表 "L:\A\事件管理\総合日誌",モード=共有更新
*総合日誌.TBLを開く。
ウィンドウ作成 表
ウィンドウ位置 最大化,1   
使用フォーム "L:\A\事件管理\総合日誌"
*総合日誌.FRMを使用してレコード内容を表示する。

各個別メニューは100個近くあり、フォルダは殆ど、"L:\A\事件管理\"と指定しています。

今般、各個別メニューの一部文字置換して利用する必要が生じました。
具体的には、"L:\A\事件管理\"のフォルダ指定部分を取り去り、
"L:\A\事件管理\総合日誌"→"総合日誌"
としたいのです。

100個近い個別メニューを開いて一つずつ文字置換をかけるのが面倒なので
まとめて一気に文字置換をかけたいのですが、その方法が解りません。

過去のBBSで見たような気がして探したのですが見つかりませんでした。
定義をテキストに書き出し、テキストで置換をかければ簡単ですが、
置換後のデータを元にファイルに戻す作業が大変な気がします。

やりたい内容説明が不十分で恐縮ですが、桐の操作だけで実現する方法をご教示頂ければ幸いです。


13421 Re:複数の一括処理ファイル定義を一気に文字置換する方法 【多遊】 2001/10/10-13:14
記事番号13415へのコメント
小松さんこんにちは。
あくまで参考に・・・・・
>具体的には、"L:\A\事件管理\"のフォルダ指定部分を取り去り、
>"L:\A\事件管理\総合日誌"→"総合日誌"
>としたいのです。
>100個近い個別メニューを開いて一つずつ文字置換をかけるのが面倒なので

方法は
1.まず全バックアップを行う(絶対に必要です)
2.CMDファイルだけ別の作業フォルダーへコピー
(作業はここで、行います)
3.簡単な一括処理を書く。(今は時間がないためご紹介できませんが)
内容は、
・#ファイル検索→*.CMDがあったら*.TBLに変更
・ファイルを開く
・文字置換を行う
・保存する
・ファイル名(拡張子)をもどす
・ファイル検索が終了するまで行う・・・・・という感じです
4.最後にもとのフォルダーへもどす

※この作業をするのに、悲しげさんの作成された
「093 桐で Grep 2.50 文字列検索処理プログラム」があると
便利ですね。

以上で作業は終わりです(走り書きですみません)

13422 Re:複数の一括処理ファイル定義を一気に文字置換する方法 natsu 2001/10/10-17:56
記事番号13421へのコメント
とにかく、100件もデータがあったら大変です
その100件のファイル名さえ自動的に取得できたらOKです

cmdファイルとtblファイルの話題は6月頃のことでしたね
(記事番号は11871)

さて、「フォルダ内のファイル名の取得」で過去のBBSを検索すると
宮城さんの一括処理がでてきますので、それを使えば簡単です
そこから先は、繰り返しコマンドとファイル複写コマンドと#文字置換で処理できます
多遊さんの方法をそのままソースにすると こんな感じでしょうか

ちなみに ”cmd一覧.tbl”がファイル名を取得した表で、[ファイル名データ]にファイル名が入っているとすると

表 "cmd一覧.tbl"
ジャンプ 行番号=先頭
繰り返し
&ファイル名データ=[ファイル名データ]
ファイル複写 &ファイル名データ,#文字置換(&ファイル名データ,".cmd","")+".tbl"
表 #文字置換(&ファイル名データ,".cmd","")+".tbl"
置換 [処理]=#文字置換([処理],"あいうえお","かきくけこ")   /* 置換したい文字列を入力します */
中止 表,編集対照表
ファイル複写 #文字置換(&ファイル名データ,".cmd","")+".tbl",&ファイル名データ
ジャンプ 行番号=次行
条件 (#eof=1) 繰り返し中止
繰り返し終了


ただし、この処理をするcmdファイルのデータパスには注意してください
(cmd一覧.tblに、このcmdファイルがなければOKです)

13423 Re:複数の一括処理ファイル定義を一気に文字置換する方法 アックン 2001/10/10-18:21
記事番号13415へのコメント
こんばんは。とりあえず、こんな一括処理でいけると思うので、試してみてください。
試す前に必ず元のファイルをバックアップしておいてください。
何が起きるかわかりませんから。(^^;

ファイル名変更時に同名ファイル(tbl)があってはいけないので、作業フォルダを作成しますが、
このフォルダをわざと最後まで残してますので、終わってから削除してください。<(^^;

 var 共通,文字列{ &str1 , &str2 , &str3 , &str4 }
 フォルダ名入力 初期値="c:\*.cmd" , プロンプト="フォルダを選べます" , 許可作業=*
, &str1  /* 対象cmdが存在するフォルダを指定 */
 cond( .not&str1 .or#データパス名=&str1 ) 終了
 &str2 = &str1+"作業"
 mkdir &str2 , 終了状態=&秒  /* 対象フォルダ下に"作業"フォルダ作成 */

 印字開始 &str2+"\test01.K3" , 終了状態=&秒  /* 作業用tbl"test01.tbl"の定義情報(test01.k3)を生成 */
 印字 """処理"",""文字列"""
 印字終了 改頁=しない
 cond( .not&秒=1 ) 終了

 表作成 &str2+"\test01.tbl" , 定義ファイル=&str2+"\test01.k3" , 終了状態=&秒
 cond( .not&秒=1 ) 終了

 &分 = 0
 loop
   &str3 = #ファイル検索( &str1+"*.cmd" , #set( 分 , &分+1 ) )
if( .not&str3 )
break
   else if( #sstr ( #ファイル属性( &str3 , 1 ) , 4 )=" " )
     copy &str3 , #set( str4 , &str2+"\"+#ファイル名( &str3 , 2 )+".tbl" ) ,
終了状態=&秒
     cond( .not&秒=0 ) 終了
     読み込み 表 , &str4 , { [処理][処理] }
     置換 [処理] = #s( [処理] , "L:\A\事件管理\総合日誌" , "総合日誌" )
     書き出し 表 , &str4 , { [処理] }
     行削除 * , 圧縮
     copy &str4 , &str3 , 終了状態=&秒
     cond( .not&秒=0 ) 終了
   end
 end
* 中止 表 編集対象表
 確認 "おわり"
終了

アックン(=^・^=)
13424 Re:複数の一括処理ファイル定義を一気に文字置換する方法 小松亀一 2001/10/10-18:44
記事番号13415へのコメント
仙台の小松です。

今、ようやくBBSを見たら3件もレスが入っており、ビックリしました。
多遊さん、natsuさん、アックンさん、ありがとうございました。

今晩、じっくり勉強させて頂き、試してみます。
どこかで似たようなテーマの記述を見たような気がしましたが、宮城さんの記述にありましたか。

いずれも私のレベルでは、解読に苦労する一括処理ですが、じっくり勉強いたします。
取り敢えずは、御礼まで。
13427 Re:複数の一括処理ファイル定義を一気に文字置換する方法 【多遊】 2001/10/10-21:43
記事番号13415へのコメント
小松さん>こんばんは
もう作業始められたかも知れませんね

>まとめて一気に文字置換をかけたいのですが、その方法が解りません。
一気にという文字に、意気込みを感じます

皆さんのresも参考にしてくださいね。

ここから、本文です。
CMDを利用してCMDを検索する場合、同じフォルダーでしたら
自分自身も対象になってしまします。

書き忘れましたがご注意下さいね。


13429 Re:複数の一括処理ファイル定義を一気に文字置換する方法 小松亀一 2001/10/10-23:11
記事番号13427へのコメント
多遊さん、おばんでございます。
色々ご気遣い有り難うございます。

>もう作業始められたかも知れませんね
今、無事終わったところです。
又、アックンさんの記述された一括処理をそのまま利用させて頂きました。

文字置換したい箇所が他にもあり、全てを
置換 [処理] = #s( [処理] , "L:\A\事件管理\総合日誌" , "総合日誌" )
を書き替えることで文字置換が終了しました。

アックンさんの記述が良く理解できない私にはただただ凄いと言う感想しかありません。

>一気にという文字に、意気込みを感じます
実は、12月に日弁コンピュータフェアがあり、私の桐による法律事務処理システム(システムと呼べる代物ではありませんが)を発表します。
昨年12月は40%の出来高でしたが、今回は80%に高めて出展したく意気込んでやっております。

その前哨としてこの13日に、多遊さんもご存じの大阪の菊元弁護士事務所で
今までの出来た分を説明してきます。
そこでの説明のためノートパソコンに全ファイルを入れて持参します。
ノートで使用する場合フォルダ名を変えなければならず、そこで今回の質問となった次第です。

私は、桐の初級一括処理以外にプログラミングの素養は全くなく、
全くの素人ですが、桐を使うとこの程度の素人でもここまでのことが出来るようになると言うことを
日弁コンピュータフェアでアピールしてくるつもりです。

>CMDを利用してCMDを検索する場合、同じフォルダーでしたら
>自分自身も対象になってしまします。
フォルダーを別にして行い、無事終了しました。

ホントに有り難うございました。心より感謝申し上げます。

13436 Re:複数の一括処理ファイル定義を一気に文字置換する方法 アックン 2001/10/11-07:54
記事番号13429へのコメント
小松さん、【多遊】さん、おはようございます。

自分のフォルダを指定したときは、プログラム3行目の #データパス名=&str1 で一応チェックしてます。
検証してないので、これでいいかどうか?ですけど。(^^;

ところで、私が今回例示した一括処理は、作業ファイルにtblを読み込み→文字置換→tbl書き出し
 といやり方で、作業ファイルを必要としますね。
みなさんのように、表を直接開いて文字置換する方法の方がシンプルでいいと思います。
作業ファイルを使ったら、おそらく削除行がなくなると思います。
ただし表整理するわけではないので、ファイルサイズがそれほど小さくなるわけではないと思います。
これはやはり表を開いてから表整理する方が正当でしょう。

作業ファイルのメリットをあえてあげるとすれば、一括処理のモノによっては速度向上がはかれること、
作業が多少なりとも安全であること、くらいでしょうか。
それとて検証したわけでもなく、ま、話半分に聞いておいてもらえればと。(^^;

実は一括を書くとき、cmdファイル名を作業表に取得するイベントを他からポンと貼り付けたのですが、
あ、もうこの手でいこか、ということでそのまま・・・・。(^^;
そんな(いいかげんなところがある)一括ですが、質問されたご本人のお役にたてたようで安堵しておるところです。

作業ファイルを生成する方法は、他に応用できるかもしれません。>小松さん
定義情報を最小限しか書いてないので、詳しくは、使用しているコマンドをマニュアルで見てください。

>私は、桐の初級一括処理以外にプログラミングの素養は全くなく、全くの素人
>ですが、桐を使うとこの程度の素人でもここまでのことが出来るようになると
>言うことを日弁コンピュータフェアでアピールしてくるつもりです。

それは楽しそうですね。(^_^)

ところで、一括処理のメニューはひとつにまとめるとメンテナンスしやすいですよ。

アックン(=^・^=)


13441 Re:複数の一括処理ファイル定義を一気に文字置換する方法 小松亀一 2001/10/11-21:50
記事番号13436へのコメント
アックンさん、おばんです。
大変お世話様でした。

>自分のフォルダを指定したときは、プログラム3行目の #データパス名=&str1 で一応チェック
>してます。
>検証してないので、これでいいかどうか?ですけど。(^^;
念のため別フォルダに置いて実行しました。

>実は一括を書くとき、cmdファイル名を作業表に取得するイベントを他からポンと貼り付けたので
>すが、あ、もうこの手でいこか、ということでそのまま・・・・。(^^;
>そんな(いいかげんなところがある)一括ですが、質問されたご本人のお役にたてたようで安堵し
>ておるところです。
お陰様にて目的は完全に達することが出来ました。

>作業ファイルを生成する方法は、他に応用できるかもしれません。>小松さん
>定義情報を最小限しか書いてないので、詳しくは、使用しているコマンドをマニュアルで見てくだ
>さい。
正直のところ私のレベルでは意味不明の記述も多く、じっくり勉強致します。

>ところで、一括処理のメニューはひとつにまとめるとメンテナンスしやすいですよ。
そうですね。今回つくづくそう思いました。
12月過ぎたら改造を検討したいと思っています。

色々ご指導頂き有り難うございました。心より御礼申し上げます。

戻る