Page 82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼外部変形の利用について R.N 15/07/21(火) 16:44 ┣Re(1):外部変形の利用について 卯之介 15/07/21(火) 19:31 ┃ ┗Re(2):外部変形の利用について R.N 15/07/22(水) 3:36 ┣Re(1):外部変形の利用について いっち 15/07/22(水) 6:51 ┃ ┗Re(2):外部変形の利用について R.N 15/07/22(水) 9:23 ┗Re(1):外部変形の利用について LA 15/07/22(水) 9:04 ┣Re(2):外部変形の利用について R.N 15/07/22(水) 11:33 ┃ ┗Re(3):外部変形の利用について LA 15/07/25(土) 2:03 ┃ ┗Re(4):外部変形の利用について R.N 15/07/26(日) 10:13 ┃ ┗Re(5):外部変形の利用について LA 15/07/26(日) 15:14 ┃ ┗Re(6):外部変形の利用について R.N 15/07/26(日) 16:39 ┣Re(2):外部変形の利用について いっち 15/07/22(水) 21:15 ┃ ┗Re(3):外部変形の利用について LA 15/07/25(土) 0:25 ┃ ┗Re(4):外部変形の利用について R.N 15/07/25(土) 2:22 ┃ ┗Re(5):外部変形の利用について LA 15/07/25(土) 7:20 ┣Re(2):外部変形の利用について いっち 15/07/26(日) 3:28 ┃ ┗Re(3):外部変形の利用について LA 15/07/26(日) 17:20 ┃ ┗Re(4):外部変形の利用について いっち 15/07/28(火) 9:22 ┃ ┗Re(5):外部変形の利用について R.N 15/07/28(火) 20:52 ┃ ┗Re(6):外部変形の利用について いっち 15/07/28(火) 21:32 ┃ ┣Re(7):外部変形の利用について いっち 15/07/28(火) 21:58 ┃ ┗Re(7):外部変形の利用について R.N 15/07/29(水) 4:54 ┣Re(2):外部変形の利用について R.N 15/07/27(月) 23:03 ┃ ┗Re(3):外部変形の利用について LA 15/07/28(火) 4:40 ┃ ┗Re(4):外部変形の利用について R.N 15/07/28(火) 7:53 ┗Re(2):外部変形の利用について R.N 15/07/29(水) 20:37 ┗Re(3):外部変形の利用について いっち 15/07/30(木) 17:32 ┗Re(4):外部変形の利用について R.N 15/07/30(木) 19:16 ┗Re(5):外部変形の利用について いっち 15/07/31(金) 8:33 ┣Re(6):外部変形の利用について R.N 15/07/31(金) 10:24 ┃ ┗Re(7):外部変形の利用について いっち 15/07/31(金) 11:09 ┃ ┗Re(8):外部変形の利用について R.N 15/07/31(金) 12:16 ┗Re(6):外部変形の利用について いっち 15/08/03(月) 8:03 ┗Re(7):外部変形の利用について R.N 15/08/03(月) 19:21 ┗Re(8):外部変形の利用について いっち 15/08/03(月) 22:18 ┣Re(9):外部変形の利用について いっち 15/08/03(月) 23:01 ┃ ┗Re(10):外部変形の利用について いっち 15/08/03(月) 23:32 ┃ ┗Re(11):外部変形の利用について いっち 15/08/03(月) 23:55 ┗Re(9):外部変形の利用について R.N 15/08/04(火) 10:21 ┗Re(10):外部変形の利用について いっち 15/08/04(火) 14:49 ┗Re(11):外部変形の利用について R.N 15/08/04(火) 21:49 ┗Re(12):外部変形の利用について いっち 15/08/04(火) 22:10 ┣Re(13):外部変形の利用について R.N 15/08/04(火) 23:13 ┃ ┗Re(14):外部変形の利用について LA 15/08/04(火) 23:50 ┃ ┣Re(15):外部変形の利用について R.N 15/08/05(水) 8:13 ┃ ┗Re(15):外部変形の利用について R.N 15/08/05(水) 17:14 ┗Re(13):外部変形の利用について いっち 15/08/05(水) 14:52 ┗Re(14):外部変形の利用について いっち 15/08/05(水) 20:21 ┗Re(15):外部変形の利用について LA 15/08/06(木) 10:17 ┗Re(16):外部変形の利用について いっち 15/08/06(木) 10:56 ─────────────────────────────────────── ■題名 : 外部変形の利用について ■名前 : R.N ■日付 : 15/07/21(火) 16:44 -------------------------------------------------------------------------
みなさん、こんにちは 外変をどのように管理・利用されてますか?。 CADの場合、状況によって、かなりの外変が必要であることは、仕方ないことと思いますが、その便利な外変を状況に応じて、即座に使えてますか?。 私の場合、外変の数が多いため、いまだに、使いきれてないように思います。 なるべく、簡単に利用できるように---とは考えているのですが。 私の利用方法ですが、 1.同系の外変を、BATメニューにまとめる。 2.外変メニューソフトを利用し、用途別に分かりやすく、利用しやすくする。 3、よく使う外変をクロックメニューに登録する。 この程度で--- もっと何か直感的に使いやすい方法等あれば、ご意見頂ければ、有難いです。 エクスプローラのような階層形式で登録・表示・選択できれば---とか思ったり? |
> エクスプローラのような階層形式で登録・表示・選択 標準メニューがそうなってますので、フォルダ分けして貯めています。 使う量にもよるでしょうけど満足しています。 使う人の記憶力にも依存するかと思いますね、滅多に使わない物は思い出さなくなっていきますから 変に分類してしまい込まないのも手かも知れません。 |
▼卯之介さん: >> エクスプローラのような階層形式で登録・表示・選択 > >標準メニューがそうなってますので、フォルダ分けして貯めています。 >使う量にもよるでしょうけど満足しています。 >使う人の記憶力にも依存するかと思いますね、滅多に使わない物は思い出さなくなっていきますから 言われる通り、歳のせいもあるのでしょうが、どこに置いたのか分からなくなったり、捜している暇があったら、直接書いた方が---みたいな。 宝の持ち腐れのように思うことがあります。 >変に分類してしまい込まないのも手かも知れません。 それもありますね。 ご意見、ありがとうございます。 |
▼R.Nさん: > 外変をどのように管理・利用されてますか?。 > 1.同系の外変を、BATメニューにまとめる。 外部変形の場合は、欲しい機能を単体で使えた方が便利なような 気がしていて、これは行っていません。 > 2.外変メニューソフトを利用し、用途別に分かりやすく、利用しやすくする。 確かR.Nさんの為に、外変メニューソフトを作られた方がいたような? 私も外変メニューソフトも用いていますが、T_Menu http://www.vector.co.jp/soft/win95/business/se224399.html を利用させて頂いています。 但し、このソフトを快適に利用させて頂く為に行ったことがあります。 1)このソフトを、c:\jwwのフォルダーに入れました。 2)このソフトの起動バッチT_Menu.batには、REM #cdが書かれていたと 思うのですが、c:\jwwに入れるなら不要なので消しました。 3)クロックのg_plusの位置にT_Menuを登録しました。 ↑これを行うと、g_plusは正常動作しなくなったと記憶しています。 ※T_Menuを、任意のフォルダーに入れる運用では、 動作が今ひとつだったような気が少ししています。 > 3、よく使う外変をクロックメニューに登録する。 基本的にはこれですが、よく使う外変だけです。 必要以上に登録しても、(私は)忘れてしまいます。 > エクスプローラのような階層形式で登録・表示・選択できれば---とか思ったり? C:\JwTool以下にホルダー分けしていますが、運用上便利です。 > もっと何か直感的に使いやすい方法等あれば、ご意見頂ければ、有難いです。 どうでしょう? それは何ともいえません。 |
▼いっちさん:こんにちは、お久しぶりです。 >> 1.同系の外変を、BATメニューにまとめる。 >外部変形の場合は、欲しい機能を単体で使えた方が便利なような >気がしていて、これは行っていません。 これも、多少、分かりづらくしている部分もあるかもです。 >> 2.外変メニューソフトを利用し、用途別に分かりやすく、利用しやすくする。 >確かR.Nさんの為に、外変メニューソフトを作られた方がいたような? 長い間、g_plusを利用させて頂いていたのですが、色々、使いづらい部分があったりで、現在は、ご察しのとおり、RN_Menuを使用させて頂いています。 http://afsoft.jp/program/p05.html T_Menuを試用程度で、使ったことはあるのですが、移行するまでには >私も外変メニューソフトも用いていますが、T_Menu >http://www.vector.co.jp/soft/win95/business/se224399.html >を利用させて頂いています。 > >但し、このソフトを快適に利用させて頂く為に行ったことがあります。 > >1)このソフトを、c:\jwwのフォルダーに入れました。 >2)このソフトの起動バッチT_Menu.batには、REM #cdが書かれていたと > 思うのですが、c:\jwwに入れるなら不要なので消しました。 >3)クロックのg_plusの位置にT_Menuを登録しました。 > ↑これを行うと、g_plusは正常動作しなくなったと記憶しています。 > >※T_Menuを、任意のフォルダーに入れる運用では、 > 動作が今ひとつだったような気が少ししています。 色々と試されているのですね。 >> 3、よく使う外変をクロックメニューに登録する。 >基本的にはこれですが、よく使う外変だけです。 >必要以上に登録しても、(私は)忘れてしまいます。 同感です。 >> エクスプローラのような階層形式で登録・表示・選択できれば---とか思ったり? >C:\JwTool以下にホルダー分けしていますが、運用上便利です。 整理が悪いところもあります。作者さん別だったり、フォルダー・bat単体だったり 整理し直した方がいいのでしょうが、中々---。 ありがとうございます。 |
▼R.Nさん: こんにちは LAの外変環境は、整備されてないので、あまり、参考になるような事はありませんが、 >エクスプローラのような階層形式で登録・表示・選択できれば---とか思ったり 簡単にできそうな、階層形式の外変メニューを思いついたので、作ってみました。 もしよろしければ、いじりたおしてやってください。 実行には、UWSCが必要となります(要関連付)。 batMenu.bat , batMenu.uws , batMenu.txt を同じフォルダに置き、外変として実行してください。 尚、batMenu.txt については、これがメニューの内容となりますので、batMenu.uws の末尾を参考に、各自作成して下さい。 batMenu.bat :=======この次行から====================== REM 外変メニュー簡易版(要UWSC) REM #jww REM #cd REM #h0 :再実行時の実行フォルダが期待通りでなかったので対策 set back=%cd% %~d0 cd %~p0 del jwc_temp.txt start /w batMenu.uws copy /y jwc_temp.txt %back% :=======この前行まで====================== batMenu.uws //=======この次行から====================== //外変メニュー簡易版(要UWSC) CTRLWIN(GETID("cmd.exe"),HIDE) //DOS窓隠し //メニュー作成 f=FOPEN("batMenu.txt",F_READ) t=FGET(f,F_ALLTEXT) FCLOSE(f) t=SPLIT(t,"<#CR>") n=RESIZE(t) dim batListM[n],batList[n] FOR i=0 to n t1=SPLIT(t[i],",") IF RESIZE(t1)=0 THEN batListM[i]="-----------------" batList[i]="" ELSE batListM[i]=TRIM(t1[0]) batList[i]=TRIM(t1[1]) ENDIF NEXT m=POPUPMENU(batListM) IF m<0 THEN EXITEXIT //jwc_temp.txt出力 f=FOPEN("jwc_temp.txt",F_WRITE) IF FOPEN(batList[m],F_EXISTS) THEN FPUT(f,"h/"+batList[m]) ELSE FPUT(f,"h#["+batList[m]+"] が見つかりません") //これの直後に再実行(R)できるように ENDIF FCLOSE(f) PROCEDURE 以下コメント FEND batMenu.txt 書き方例 標準 , {三斜 , C:\JWW\JWW_SMPL.BAT 面積計算 , C:\JWW\ZAHYOU.BAT 天空} , C:\JWW\TENHYOU.BAT 自作 , {JwfSwitcher , c:\jww\gaihen\my\JwfSwitcher.bat 線色変更 , {線色抽出 , c:\jww\gaihen\my\線色抽出.bat 線色変更} , c:\jww\gaihen\my\線色変更.bat 連続印刷} , c:\jww\gaihen\my\連続印刷.bat 表示名 , batファイル名 の様に書く {}で囲むと、直前行のサブメニューになる(ネスト可) ,が無い行はセパレータとなる =======この前行まで====================== |
▼LAさん: こんにちは、お世話様です。 早速、試用させて頂きました。 慌てモンなもので、batMenu.txtも作らず、いきなり GetValue:Variant or safe array index out of bounds 16行目:BATLIST[1]=TRIM(T1[1]) 当然ですね(T_T) 面白〜い、と言ったら、怒られるかもしれませんが、色々な方法があるものですね。 羨ましいかぎり--- まだ、LAさんのデータでしか試してませんが、 現在、クロックメニューに入れてる外変をこちらに移転して、一つにしても、よさそうですね。 ありがとうございます。 |
▼R.Nさん: こんにちは いつも、ご試用、ありがとうございます。 >>:再実行時の実行フォルダが期待通りでなかったので対策 >>set back=%cd% >>%~d0 >>cd %~p0 >>copy /y jwc_temp.txt %back% この件ですが、 どうも、h/ で移行した場合、再実行すると、その前の外変が実行されるのですが、そのときの実行フォルダが、何故かh/ 先の物となってしまい、普通にやるとまともに動作しません。 そこで、batファイル内で、カレントフォルダをbatMenu.batのあるところに移動してからbatMenu.uwsを実行し、出来たJWC_TEMP.txt を、もともとの実行フォルダに描き戻す ことにしました。 次に、再実行が選択先の外変ではなく、これになってしまう件ですが、 G+が、選択先の外変batのコピーを作成し、前後を改変して実行しているのに対し、これは、h/ を出力して選択先の外変に移行するのみで、それ以降の動作に関与する事はできません。 そこで、再実行機能を付けてみました。一手増えてしまいますが、許容範囲、という事で... 再実行機能を使いたい場合は、batMenu.txtの先頭行を、 <再> , として下さい。以降実行する度に、この部分が書き換わるようになります。 <再>が邪魔になるケースもあるので、先頭行がそうなっていない場合は書き換えせず、再実行機能は働きません。 batMenu.uws //=======この次行から====================== //外変メニュー簡易版(要UWSC) CTRLWIN(GETID("cmd.exe"),HIDE) //DOS窓隠し //au3=CREATEOLEOBJ("AutoItX3.Control") //au3.AutoItSetOption("WinTitleMatchMode",2) //2:部分一致 //au3.WinSetState("cmd.exe","",au3.SW_HIDE) //メニュー作成 f=FOPEN("batMenu.txt",F_READ) t=FGET(f,F_ALLTEXT) FCLOSE(f) t=SPLIT(t,"<#CR>") n=RESIZE(t) dim batListM[n],batList[n] FOR i=0 to n t1=SPLIT(t[i],",") IF RESIZE(t1)=0 THEN batListM[i]="-----------------" batList[i]="" ELSE batListM[i]=TRIM(t1[0]) batList[i]=TRIM(t1[1]) ENDIF NEXT m=POPUPMENU(batListM) IF m<0 THEN EXITEXIT //jwc_temp.txt出力 f=FOPEN("jwc_temp.txt",F_WRITE) IF FOPEN(batList[m],F_EXISTS) THEN FPUT(f,"h/"+batList[m]) ELSE FPUT(f,"h#["+batList[m]+"] が見つかりません") //これの直後に再実行(R)できるように ENDIF FCLOSE(f) //<再> を書換 IF COPY(batListM[0],1,3)="<再>" AND m<>0 THEN t[0]="<再>"+REPLACE(REPLACE(batListM[m],"{",""),"}","") +" , "+batList[m] f=FOPEN("batMenu.txt",F_WRITE) FPUT(f,JOIN(t,"<#CR>")) FCLOSE(f) ENDIF //msgbox(GET_CUR_DIR) PROCEDURE 以下コメント FEND batMenu.txt 書き方例 <再> , 標準 , {三斜 , C:\JWW\JWW_SMPL.BAT 面積計算 , C:\JWW\ZAHYOU.BAT 天空} , C:\JWW\TENHYOU.BAT 自作 , {JwfSwitcher , c:\jww\gaihen\my\JwfSwitcher\JwfSwitcher.bat 線色変更 , {線色抽出 , c:\jww\gaihen\my\線色抽出.bat 線色変更} , c:\jww\gaihen\my\線色変更.bat 連続印刷} , c:\jww\gaihen\my\参考\連続印刷.BAT 表示名 , batファイル名 の様に書く {}で囲むと、直前行のサブメニューになる(ネスト可) ,が無い行はセパレータとなる 最初の行を、<再> , とすると、実行後、今回使用した外変に書き換わる エクスプローラ Shift+右クリック-> で、ファイルのフルパスが取得可 CTRLWIN(GETID("cmd.exe"),SHOW) //非常用 =======この前行まで====================== |
▼LAさん: こんにちは、 八戸出張(4ヵ月)も終わり、帰ってきてからの返事となり、遅くなりました。 すみません >>>:再実行時の実行フォルダが期待通りでなかったので対策 >>>set back=%cd% >>>%~d0 >>>cd %~p0 >>>copy /y jwc_temp.txt %back% > >この件ですが、 >どうも、h/ で移行した場合、再実行すると、その前の外変が実行されるのですが、そのときの実行フォルダが、何故かh/ 先の物となってしまい、普通にやるとまともに動作しません。 >そこで、batファイル内で、カレントフォルダをbatMenu.batのあるところに移動してからbatMenu.uwsを実行し、出来たJWC_TEMP.txt を、もともとの実行フォルダに描き戻す ことにしました。 上記、記述なしの場合も試してみてたのですが、言われるようなエラーになりますね。 >次に、再実行が選択先の外変ではなく、これになってしまう件ですが、 > >G+が、選択先の外変batのコピーを作成し、前後を改変して実行しているのに対し、これは、h/ を出力して選択先の外変に移行するのみで、それ以降の動作に関与する事はできません。 外変batに#hrを記述しない方が使いやすい場合(戻るで再実行)があり、相談させて頂きました。 >そこで、再実行機能を付けてみました。一手増えてしまいますが、許容範囲、という事で... >再実行機能を使いたい場合は、batMenu.txtの先頭行を、 ><再> , >として下さい。以降実行する度に、この部分が書き換わるようになります。 ><再>が邪魔になるケースもあるので、先頭行がそうなっていない場合は書き換えせず、再実行機能は働きません。 リスト先頭に、"--------"は表示されるのですが、外変実行後、クリックすると、"[]がみつかりません"となります。 ここに、前回使用の外変名?が入るのかな、と思うのですが。 それから、レス削除したにも関わらず、返信頂き、すみません。 (自分で考えもせず、レスするのも申し訳ない-----とか思い) それと、Autolt3についても、詳しい説明頂き、 ありがとうございます。 蛇足で、batMenu.txt の例 分類I ⇒ 分類II-1 ⇒ 外変名1 ⇒ 1.bat 分類II-2 ⇒ 外変名2 ⇒ 2.bat と、したいとき、 =====batMenu.txt(記述例)=========== 分類I , {分類II-1 , {外変名1} , C:\jww\gaibu\111\1.bat 分類II-2 , {外変名2}} , C:\jww\gaibu\222\2.bat ================================= |
▼R.Nさん: こんにちは そうだったんでしたか。 長い出張、お疲れ様でした。 >リスト先頭に、"--------"は表示されるのですが、外変実行後、クリックすると、"[]がみつかりません"となります。 >ここに、前回使用の外変名?が入るのかな、と思うのですが。 ここは少し手を抜いたヶ所なので、引っかかりやすいかな。 >>,が無い行はセパレータとなる が優先されますので、 <再> , という様に、 , も忘れずに付けてください。 >蛇足で、batMenu.txt の例 >分類I ⇒ 分類II-1 ⇒ 外変名1 ⇒ 1.bat > 分類II-2 ⇒ 外変名2 ⇒ 2.bat >と、したいとき、 >=====batMenu.txt(記述例)=========== >分類I , >{分類II-1 , >{外変名1} , C:\jww\gaibu\111\1.bat >分類II-2 , >{外変名2}} , C:\jww\gaibu\222\2.bat >================================= これ、入れようと思ってたら、消えてたので、入れれませんでした。 再掲載、ありがとございます。 |
▼LAさん: ><再> , >という様に、 , も忘れずに付けてください。 そうでした、注意力に欠けますね。(ノ_-。) ありがとうございます。 |
▼LAさん: こんばんは。 > batMenu.uws > //=======この次行から====================== > //外変メニュー簡易版(要UWSC) > CTRLWIN(GETID("cmd.exe"),HIDE) //DOS窓隠し 私は、AutoIt v3で外部変形の作成も行うようになったのですが、 Formを用いる外部変形でこれと同等の事を行ってみたところ なかなか良いみたいです。 ↑ ※Formの移動位置をiniに記録させるようなタイプの場合、 DOS窓が邪魔になってバグったりしましたので。 今のところは様子見で、 1) スクリプトを、2重起動しないようにする。 2) Exit 0でない場合は、強制的にDOS窓を出す。 など行って試しているところではあります。 UWSCで文字列処理を行う外部変形を作ろうとすると、 やや遅いような気がしますが、AutoIt v3では快適です。 その為、Formを用いない外部変形では、わざわざDOS窓を 隠す必要はありませんけれど。 参考にさせて頂きました。 |
▼いっちさん: こんにちは レスが遅くなりましたが、いろいろと、ありがとうございます。 動作速度自体は、AutoItの方が早いかな。 試しに、 //CTRLWIN(GETID("cmd.exe"),HIDE) //DOS窓隠し au3=CREATEOLEOBJ("AutoItX3.Control") au3.AutoItSetOption("WinTitleMatchMode",2) //2:部分一致 au3.WinSetState("cmd.exe","",au3.SW_HIDE) としてみたところ、DOS窓が消えるまでの時間が若干短くなりました。 AutoItはGUI機能が強力なので、Formを用いるような外変をつくるのにも便利ですよね。 こちらこそ、参考になります。 どうもありがとうございました。 |
▼LAさん・いっちさん:こんにちは >試しに、 >//CTRLWIN(GETID("cmd.exe"),HIDE) //DOS窓隠し >au3=CREATEOLEOBJ("AutoItX3.Control") >au3.AutoItSetOption("WinTitleMatchMode",2) //2:部分一致 >au3.WinSetState("cmd.exe","",au3.SW_HIDE) に、変更したら、 COM_Error:クラス文字列が無効です,ProgID:"AutoIt3.Contorol" 4行目:AU3=CREATEOLEOBJ("AutoItX3.Contorol") で、ストップ? AutoIt v3は、 http://blog.livedoor.jp/blackcode/archives/1224220.html から、DL・インストール、 最初、64をインストールしたのですが、ダメで、32?86で"OK"でした。 |
▼R.Nさん: こんにちは さっそくの試用、ありがとうございます。 これは、AutoItV3に付属している、AutoItX という機能を利用しています。 AutoItXは、AutoItのOCM/DLLバージョンで、この様に、他言語からAutoItの一部の機能を呼び出すことができます。 で、32bitアプリであるUWSCから呼び出されたので、使われるAutoItXも、32bit(x86)版のものとなります。 AutoItのフォルダを見るとわかるのですが、x64 , x86 どちらでインストールしても、構成ファイルに変わりはなく、両方とも入っています。どうも、両者の差は、レジストリ登録とか、そういったところの様です。 ということで、もし、64bit版でAutiItをインストールした場合は、 http://blog.livedoor.jp/blackcode/archives/1795724.html のCOMインターフェイス のところを参考に、 コマンドプロンプトを管理者権限で開いて、 cd \tool\AutoIt3\AutoItX (c:\tool\AutoIt3 にAutoItをインストールした場合) regsvr32.exe AutoItX3.dll で、x86版の AutoItX も登録されます。 逆に、x86版でインストールした場合は、 regsvr32.exe AutoItX3_x64.dll で、x64版のAutoItX も登録されますが、必要な場面がかなり限られますので、必要になったときに登録 でもいいと思います。 |
▼LAさん: こんにちは。 > もしよろしければ、いじりたおしてやってください。 お言葉に甘えていじりたおさせて頂きました。 (自分用にバッチファイル及びスクリプトを、 少しだけ、調整してみました。) 私のjw_win.jwfの設定を、下記の設定としてみました。 GCOM_100 =batMenu, LD2_AM = 100 T_Menuはc:\jwwに入れていて、そこにT_MenuのPATH.TXTがあります。 そのPATH.TXTをLAさんのbatMenu.uwsでも利用するようにしてみました。 LAさんのbatMenu.uwsもc:\jwwに入れました。 batMenu.uwsの呼び出しは、(あくまで)クロックメニューから 呼び出す事を前提としています。 私にはそれで良いかなと思います。 改良点としては、既に登録してあるT_MenuのPATH.TXTを 利用したかったからという点です。 LAさんが提示されたスクリプトを利用して見たかったから というのも理由です。 |
▼いっちさん: こんにちは いじりたおし、ありがとうございます。 T_Menu の PATH.TXT ですか。 構成が似ているから、 1項目目のタブNoごとに{}でくくり、 2項目目のbatファイル名を項目名に使う様にしてやれば、 そのまま共有できますね。 おそれおおいような気もしますが... おもしろい用例、ありがとうございました。 |
▼LAさん: こんにちは。 > そのまま共有できますね。 > おそれおおいような気もしますが... というか、batMenu.uwsの機能を制限してしまいますね。 私の場合T_Menuからの以降を考えていて、簡単に移行できる方法を 模索していました。 現段階では、下記のようにしてみました。 1. T_MenuのPATH.TXTはもともとLAさんのbatMenu.uwsへの移行がしやすい 書き出しになっていました。 2. T_MenuのPATH.TXTをコピーし、名前をbatPATH.TXTとしました。 3. batPATH.TXTの記述方法は、下記です。 ※タブは文字ではなく、タブ(TAB)を入力する事を示します。 (例1) 分類I タブ分類II-1 タブタブ外変名1タブC:\jww\gaibu\111\1.bat タブ分類II-2 タブタブ外変名2タブC:\jww\gaibu\222\2.bat (例2) 標準 タブ三斜タブC:\JWW\JWW_SMPL.BAT タブ面積計算タブC:\JWW\ZAHYOU.BAT タブ天空タブC:\JWW\TENHYOU.BAT 自作 タブJwfSwitcherタブc:\jww\gaihen\my\JwfSwitcher.bat タブ線色変更 タブタブ線色抽出タブc:\jww\gaihen\my\線色抽出.bat タブタブ線色変更タブc:\jww\gaihen\my\線色変更.bat タブ連続印刷タブc:\jww\gaihen\my\連続印刷.bat 上記(例1)や(例2)を、batMenu.txtの形式に変更するスクリプト (バッチファイル)は、下記です。 ※てすとbatMenu.txtを書き出します。 ※awkをバッチに記述する方法は、Lite & Seen Liteさんのページより 学んでおります。 ※空行が実は空行ではなく、タブやスペースが入っていたとか、 最終行にも実は、余計なタブやスペースが入っていたとかだと、 正常動作しません。 ※全てのケースに対処したとは、申しません。 自分が考えられる範囲での対応です。 ↓ batMenuText整形.bat (この下から) @findstr /v "^@" %0 | jgawk -f - batPATH.txt>てすとbatMenu.txt & goto:eof BEGIN{aflg=0;OFS=","} { if($0~/^$/){strflg=1;next} bflg=aflg if($0~/^[^\t]/){aflg=0} else if($0~/^\t[^\t]/){aflg=1} else if($0~/^\t\t[^\t]/){aflg=2} else if($0~/^\t\t\t/){ print(NR "行目は未対応です") endflg=1;exit } $1=$1 if(bflg<aflg){ $1="{" $1;cflg+=1 }else if(bflg==aflg+1){ bstr1=bstr1 "}";cflg-=1 }else if(bflg==aflg+2){ bstr1=bstr1 "}}";cflg-=2 } if(length(bstr1)>0){ print bstr1,bstr2 if(strflg==1){printf "\n"} } bstr1=$1;bstr2=$2;strflg=0 } END{ if(endflg==0){ if(cflg==1){print bstr1 "}",bstr2} else if(cflg==2){print bstr1 "}}",bstr2} else{print bstr1,bstr2} } } |
▼いっちさん:こんにちは、 batMenuText整形.batを実行しても、白紙しか吐出してくれないので、batを止めてみたら、下記エラーが戻ってました。 jgawk: -:1: ^ Invalid char '@' in expression 原因は、何でしょう? (jgawk 1.8.6) |
▼R.Nさん: こんばんは。 >原因は、何でしょう? (jgawk 1.8.6) 何故だか解らないのですが、掲示板にコードを貼ると、 @”と %0の間に意味不明な;が入ってしまい除去できないようです。 ↑バケないように全角にして今回は投稿しますが 本当は半角です。 意味不明な;を削除すれば動きませんか? |
▼いっちさん: >▼R.Nさん: > >こんばんは。 > > >>原因は、何でしょう? (jgawk 1.8.6) > >何故だか解らないのですが、掲示板にコードを貼ると、 >@”と %0の間に意味不明な;が入ってしまい除去できないようです。 > >↑バケないように全角にして今回は投稿しますが >本当は半角です。 > >意味不明な;を削除すれば動きませんか? 書き忘れました。 1行目だけです。 |
▼いっちさん: >意味不明な;を削除すれば動きませんか? 動作しました。 ありがとうございます。 (jgawk 1.8.6)は、間違いでした。 rubyと勘違いしてました。 |
▼LAさん: こんにちは、質問ばかりで、ごめんなさい。 作図画面のマウス位置に、リストが表示されますが、 リスト表示をよく見ると、文字列の左側に、空白の"列"?---なのか、うっすらと"縦線"が見えますが、この間を利用できたり?、幅調整したり、または、削除とかできるのでしょうか? それと、階層的にリスト表示されますが、階層間のリストどうしの間隔は、調整できるのでしょうか? ご意見だけで、結構です。 よろしく、お願いします。 |
▼R.Nさん: こんにちは >リスト表示をよく見ると、文字列の左側に、空白の"列"?---なのか、うっすらと"縦線"が見えますが、この間を利用できたり?、幅調整したり、または、削除とかできるのでしょうか? >それと、階層的にリスト表示されますが、階層間のリストどうしの間隔は、調整できるのでしょうか? HELPの、POPUPMENU のところを抜粋 >// ポップアップメニュ >戻値 = POPUPMENU( メニュ項目, [X, Y] ) >引数 >メニュ項目: 表示メニュ項目を配列変数にて渡す >(サブメニュは { } にて指定: a,b,{c, d},e の場合は c,dがbのサブメニュになる) > X、Y: 表示位置 X、Y (デフォルトはマウス位置) >戻値 >選択された項目の配列変数位置 うーん。どちらも、UWSCの機能だけではできないっぽいですね。 一般的な、Windowのメニューと同じ形状で、ソフトによってはアイコンとか入るんですが、UWSCにはその辺の機能は実装されていないようです。 |
LAさん;こんにちは、 見た目だけの質問で、ごめんなさい。 ありがとうございます。 |
▼LAさん:こんにちは 公開して頂いてから、常に使用する外変を、こちらに登録し続けている状況です。 (個人的に、ま〜3階層位までが、分かりやすいかな(数にも限度が)?---などと思いつつ) AFさんに作って頂いたRN_Menuも、batから起動するように作成・登録し、以前のEXE起動(クイック起動)に加え、双方から起動できるようになり、便利になりました。 今まで以上に、外変を広く見渡せるようになり、使いやすさは倍増です。 色々と、勝手なことばかり言って、寝不足などご苦労をお掛けし、誠に恐縮です。 素晴らしいプログラム提供して頂き、感謝致します。 |
▼R.Nさん: > (個人的に、ま〜3階層位までが、分かりやすいかな > (数にも限度が)?---などと思いつつ) こんにちは。 もし、私が書いたコードを修正される場合、 力技で修正するなら、下記です。 試しにですが、一度だけやってみました。 但し、詳細な動作確認を行った訳ではありませんので だめでもご容赦ください。 元の7行目から記述します。 else if($0~/^\t[^\t]/){aflg=1} else if($0~/^\t\t[^\t]/){aflg=2} else if($0~/^\t\t\t[^\t]/){aflg=3} else if($0~/^\t\t\t\t[^\t]/){aflg=4} 元の9行目は、行が下にずれますが、 下記のように修正します。 else if($0~/^\t\t\t\t\t/){ print(NR "行目は未対応です") endflg=1;exit } 上記と同様の修正を下記でも行います。 下記は元の16行目です。 }else if(bflg==aflg+1){ bstr1=bstr1 "}";cflg-=1 }else if(bflg==aflg+2){ bstr1=bstr1 "}}";cflg-=2 }else if(bflg==aflg+3){ bstr1=bstr1 "}}}";cflg-=3 }else if(bflg==aflg+4){ bstr1=bstr1 "}}}}";cflg-=4 上記と同様の修正を下記でも行います。 下記は元の29行目です。 if(cflg==1){print bstr1 "}",bstr2} else if(cflg==2){print bstr1 "}}",bstr2} else if(cflg==3){print bstr1 "}}}",bstr2} else if(cflg==4){print bstr1 "}}}}",bstr2} else{print bstr1,bstr2} } } batPATH.TXTの記述例は下記です。 分類I タブ分類II-1 タブタブ外変名1タブC:\jww\gaibu\111\1.bat タブ分類II-2 タブタブ外変名2タブC:\jww\gaibu\222\2.bat タブタブ分類II-3 タブタブタブ外変名3-1タブC:\jww\gaibu\333\31.bat タブタブタブ外変名3-2タブC:\jww\gaibu\333\32.bat タブタブタブ分類II-4 タブタブタブタブ外変名4-1タブC:\jww\gaibu\444\41.bat タブタブタブタブ外変名4-2タブC:\jww\gaibu\444\42.bat 標準 タブ三斜タブC:\JWW\JWW_SMPL.BAT タブ面積計算タブC:\JWW\ZAHYOU.BAT タブ天空タブC:\JWW\TENHYOU.BAT 自作 タブJwfSwitcherタブc:\jww\gaihen\my\JwfSwitcher.bat タブ線色変更 タブタブ線色抽出タブc:\jww\gaihen\my\線色抽出.bat タブタブ線色変更タブc:\jww\gaihen\my\線色変更.bat タブ連続印刷タブc:\jww\gaihen\my\連続印刷.bat |
▼いっちさん:こんにちは、 珍しく、一発で転記でき・動作しました。(*^^*)ポッ ありがとうございま〜す。 |
▼R.Nさん: こんにちは。 > 一発で転記でき・動作しました。(*^^*)ポッ 良かったです。 おそらく、ご自身で転記のご苦労をされたスクリプトの方が 愛着があるかもしれませんが、あえて、 > (数にも限度が)?---などと思いつつ) に挑戦してみました。 ※ batPATH.TXTの記述例は下記です。 分類I タブ分類II-1 タブタブ外変名1タブC:\jww\gaibu\111\1.bat タブ分類II-2 タブタブ外変名2タブC:\jww\gaibu\222\2.bat タブタブ分類II-3 タブタブタブ外変名3-1タブC:\jww\gaibu\333\31.bat タブタブタブ外変名3-2タブC:\jww\gaibu\333\32.bat タブタブタブ分類II-4 タブタブタブタブ外変名4-1タブC:\jww\gaibu\444\41.bat タブタブタブタブ外変名4-2タブC:\jww\gaibu\444\42.bat タブタブタブタブ分類II-51 タブタブタブタブタブ外変名51-1タブC:\jww\gaibu\555\51.bat タブタブタブタブタブ外変名51-2タブC:\jww\gaibu\555\52.bat タブタブタブタブタブ分類II-6 タブタブタブタブタブタブ外変名6-1タブC:\jww\gaibu\666\61.bat タブタブタブタブタブタブ外変名6-2タブC:\jww\gaibu\666\62.bat タブタブタブタブタブタブ分類II-7 タブタブタブタブタブタブタブ外変名7-1タブC:\jww\gaibu\777\71.bat タブタブタブタブタブタブタブ分類II-8 タブタブタブタブタブタブタブタブ外変名8-1タブC:\jww\gaibu\888\81.bat タブタブタブタブタブタブタブ外変名7-2タブC:\jww\gaibu\777\72.bat タブタブタブタブタブタブ外変名6-3タブC:\jww\gaibu\666\63.bat タブタブタブタブタブ外変名5-3タブC:\jww\gaibu\555\53.bat タブタブタブタブ分類II-52 タブタブタブタブタブ外変名51-3タブC:\jww\gaibu\555\53.bat 標準 タブ三斜タブC:\JWW\JWW_SMPL.BAT タブ面積計算タブC:\JWW\ZAHYOU.BAT タブ天空タブC:\JWW\TENHYOU.BAT 自作 タブJwfSwitcherタブc:\jww\gaihen\my\JwfSwitcher.bat タブ線色変更 タブタブ線色抽出タブc:\jww\gaihen\my\線色抽出.bat タブタブ線色変更タブc:\jww\gaihen\my\線色変更.bat タブ連続印刷タブc:\jww\gaihen\my\連続印刷.bat ※ コードは、下記です。 今回ももし、1行目に >意味不明な; が入ってしまいましたら、削除してください。 もしよろしければ、試してやってください。 よろしくお願い致します。 ↓batMenuText整形2.bat (この下から) @findstr /v "^@" %0 | jgawk -f - batPATH.txt>てすとbatMenu.txt & goto:eof BEGIN{aflg=0;OFS=","} { if($0~/^$/){strflg=1;next} bflg=aflg aflg=tab_check() if(aflg=="×"){ print(NR "行目を確認して下さい") endflg=1;exit } $1=$1 if(bflg<aflg){$1="{" $1;cflg+=1} else if(bflg>aflg){ balance=bflg-aflg bracket_str=bracket_repeat("}",balance) bstr1=bstr1 bracket_str cflg-=balance } if(length(bstr1)>0){ print bstr1,bstr2 if(strflg==1){printf "\n"} } bstr1=$1;bstr2=$2;strflg=0 } END{ if(endflg==0){ if(cflg>0){ bracket_str=bracket_repeat("}",cflg) print bstr1 bracket_str,bstr2 } else{print bstr1,bstr2} } } function tab_check( i,mid_str){ for(i=1;i<=length($0);i++){ mid_str=substr($0,i,1) if(mid_str!="\t"){return i-1} } return "×" } function bracket_repeat(str,num, i,brep){ for(i=1;i<=num;i++){brep=brep str} return brep } |
▼いっちさん:こんにちは、 度々、すみません。 スクリプトを理解できるレベルではありませんが、 構文を簡略化されたのでしょうね?。 ";"を削除し、動作確認しました。 ありがとうございます。 |
▼R.Nさん: > ";"を削除し、動作確認しました。 ご確認ありがとうございます。 > 構文を簡略化されたのでしょうね?。 その通りです。 関数(function)を用いる事にしました。 行っていることは、これまでのコードと同じです。 > スクリプトを理解できるレベル 今回書いたスクリプトをもし読んで頂けるなら、 たったひとつの特徴だけ、あらかじめお話しさせて頂きます。 printで書き出しているのは、現在読みこんでいる行ではなく、 ひとつ前の行を書きだしています。 そのようにしないと、 "}" を入れるのが (私には)難しかったからです。 その為、最後の行のprintは、スクリプトのENDの部分で 行っています。 >意味不明な; については教えて頂かなかったら、気が付きませんでした。 動作確認もして頂いて、ありがとうございました。 |
▼いっちさん:こんにちは、 >関数(function)を用いる事にしました。 >行っていることは、これまでのコードと同じです。 >printで書き出しているのは、現在読みこんでいる行ではなく、 >ひとつ前の行を書きだしています。 >そのようにしないと、 "}" を入れるのが >(私には)難しかったからです。 > >その為、最後の行のprintは、スクリプトのENDの部分で >行っています。 できる方は、ポケットの数次第で、色々な手法を用いることができるのでしょうね。 理解できるように、少しづつ努力ですね。 ありがとうございます。 |
こんにちは。 下記 > 今回ももし、1行目に > >意味不明な; > が入ってしまいましたら、削除してください。 について、 Lite & Seen Liteさんのホームページ http://sky.geocities.jp/lite_and_seen_lite/ を改めて見てみたら 掲示板に貼ってもバケそうもない記述方法があることに 今さらながら気づきました。 申し訳ありませんが、本当にバケないかテストさせてください。 尚下記のコードは、batPATH.TXTにいくつ登録したかを確認するだけです。 ※ batPATH.TXTの記述例は下記です。 <再> 分類I タブ分類II-1 タブタブ外変名1タブC:\jww\gaibu\111\1.bat タブ分類II-2 タブタブ外変名2タブC:\jww\gaibu\222\2.bat タブタブ分類II-3 タブタブタブ外変名3-1タブC:\jww\gaibu\333\31.bat タブタブタブ外変名3-2タブC:\jww\gaibu\333\32.bat タブタブタブ分類II-4 タブタブタブタブ外変名4-1タブC:\jww\gaibu\444\41.bat タブタブタブタブ外変名4-2タブC:\jww\gaibu\444\42.bat (以降省略) ↓ 登録数の確認.bat (この下から) #& cls & jgawk -f %0 batPATH.TXT & pause & goto:eof BEGIN{IGNORECASE=1} $0~/^[^\t]+/{ if(NR==1 && $0~/^ *<再> *$/){next} else if(NF==1){title=$1} else{title="区分無し"} if(strlen<length(title)){strlen=length(title)} if(!(title in head)){list[++n]=title} } { if($NF~/\.bat *$/){ head[title]+=1 sum+=1 if(numlen2<length(head[title])){numlen2=length(head[title])} } } END{ sline=\ "------------------------------------------------------------" wline=\ "============================================================" numlen1=length(n) base_str="[] の外変は個です。" rcnt=numlen1+strlen+numlen2+length(base_str)+2 print substr(wline,1,rcnt) print "※ 登録外変数の確認" print substr(wline,1,rcnt) for(i=1;i<=n;i++){ printf("[%0*d] %-*sの外変は%0*d個です。\n", numlen1,i,strlen,list[i],numlen2,head[list[i]]) print substr(sline,1,rcnt) } print "合計 " sum " 個です。\n" } |
▼いっちさん:こんにちは、 実行してみましたが、"CLS"の後、止まってるように見えますが? DOS窓は、何も表示されず、最初のカーソル点滅だけです。 文字バケテストですのでーーーー自身で確認したかったのが主眼でしょうが |
▼R.Nさん: こんにちは。 > 文字バケテストですのでーーーー自身で確認したかったのが主眼でしょうが 外部変形の登録数が少しづつ増えて行くと、どのくらい登録したのか、 自分自身が知りたくなって、作成したスクリプトです。 もし、試用して頂けるならと思います。 再現できるかどうかやってみましたが、もし、batPATH.TXTが無かったとしても > 実行してみましたが、"CLS"の後、止まってるように見えますが? > DOS窓は、何も表示されず、最初のカーソル点滅だけです。 とはなりませんでした。 なぜかは解りませんが、下記の方法をお試しください。 1.awkファイルとbatファイルを分ける。 そして、batを実行します。 「test.batの記述内容」 jgawk -f test.awk batPATH.TXT & pause 「test.awkの記述内容」 もともとの登録数の確認.batの2行目以降の内容全てです。 これで test.bat を実行できるでしょうか。 この方法は使い勝手も画面表示もいまひとつですが、 一番確実な方法です。 2.上記の方法が実行出来た場合には、つぎの方法もあります。 sedを用います。 但し最近のsedを用いると、日本語が文字化けしてしまうので、 下記のOnigsedを用います。 Onigsed 2009年10月31日バージョン http://www.kt.rim.or.jp/~kbk/sed/ onigsed-20091031.zip 上記を解凍したらその中のonigsed.exeをこのバッチファイルと同じフォルダーに入れるか、 あるいは、パスの通ったフォルダーに入れます。 Onigsedを用いた記述方法は、下記です。 ↓登録数の確認2.bat (この下から) @echo off onigsed -n "/^#script/,/^#end/p" %0|jgawk -f - batPATH.txt & pause & goto:eof #script BEGIN{IGNORECASE=1} $0~/^[^\t]+/{ if(NR==1 && $0~/^ *<再> *$/){next} else if(NF==1){title=$1} else{title="区分無し"} if(strlen<length(title)){strlen=length(title)} if(!(title in head)){list[++n]=title} } { if($NF~/\.bat *$/){ head[title]+=1 sum+=1 if(numlen2<length(head[title])){numlen2=length(head[title])} } } END{ sline=\ "------------------------------------------------------------" wline=\ "============================================================" numlen1=length(n) base_str="[] の外変は個です。" rcnt=numlen1+strlen+numlen2+length(base_str)+2 print substr(wline,1,rcnt) print "※ 登録外変数の確認" print substr(wline,1,rcnt) for(i=1;i<=n;i++){ printf("[%0*d] %-*sの外変は%0*d個です。\n", numlen1,i,strlen,list[i],numlen2,head[list[i]]) print substr(sline,1,rcnt) } print "合計 " sum " 個です。\n" } #end |
少し訂正します。 > 1.awkファイルとbatファイルを分ける。 > そして、batを実行します。 > > 「test.batの記述内容」 > jgawk -f test.awk batPATH.TXT & pause > > 「test.awkの記述内容」 > もともとの登録数の確認.batの2行目以降の内容全てです。 > > これで test.bat を実行できるでしょうか。 > この方法は使い勝手も画面表示もいまひとつですが、 > 一番確実な方法です。 すみません。 「test.batの記述内容」 @echo off jgawk -f test.awk batPATH.TXT & pause とすれば、画面表示は問題ありません。 |
> 実行してみましたが、"CLS"の後、止まってるように見えますが? > DOS窓は、何も表示されず、最初のカーソル点滅だけです。 再現できました。 しかし、そのミスをR.Nさんがされたとは思えないのですが。 下記で再現できました。 1行目を ↓ 登録数の確認.bat (この下から) 2行目を #& cls & jgawk -f %0 batPATH.TXT & pause & goto:eof とすると再現できます。 あるいは、 1行目の先頭に全角スペースを入れた場合 #& cls & jgawk -f %0 batPATH.TXT & pause & goto:eof 再現できます。 後は、もう少し考えないと解りません。 |
後再現できたのは、 掲示板にコードを貼ると、半角スペース2つが、 全角スペース1つになってしまいますが、 それの修正もれが1か所でもあると再現するようです。 しかし、R.Nさんがこのミスをしたとは、やはり思えません。 |
▼いっちさん:こんにちは、 >> 文字バケテストですのでーーーー自身で確認したかったのが主眼でしょうが >外部変形の登録数が少しづつ増えて行くと、どのくらい登録したのか、 >自分自身が知りたくなって、作成したスクリプトです。 >もし、試用して頂けるならと思います。 bat・スクリプトは、有難く参考にさせて頂いてます。 >再現できるかどうかやってみましたが、もし、batPATH.TXTが無かったとしても >> 実行してみましたが、"CLS"の後、止まってるように見えますが? >> DOS窓は、何も表示されず、最初のカーソル点滅だけです。 >とはなりませんでした。 >なぜかは解りませんが、下記の方法をお試しください。 色々試してみたのですが、ダメでした。エラーが表示されると解決できるのでしょうが (#& cls & を削除しても) >1.awkファイルとbatファイルを分ける。 > そして、batを実行します。 > >「test.batの記述内容」 >jgawk -f test.awk batPATH.TXT & pause > >「test.awkの記述内容」 >もともとの登録数の確認.batの2行目以降の内容全てです。 > >これで test.bat を実行できるでしょうか。 >この方法は使い勝手も画面表示もいまひとつですが、 >一番確実な方法です。 こちらは、問題なく動作するのですが、 >2.上記の方法が実行出来た場合には、つぎの方法もあります。 > sedを用います。 > 但し最近のsedを用いると、日本語が文字化けしてしまうので、 > 下記のOnigsedを用います。 > >Onigsed 2009年10月31日バージョン >http://www.kt.rim.or.jp/~kbk/sed/ >onigsed-20091031.zip > >上記を解凍したらその中のonigsed.exeをこのバッチファイルと同じフォルダーに入れるか、 >あるいは、パスの通ったフォルダーに入れます。 >Onigsedを用いた記述方法は、下記です。 > >↓登録数の確認2.bat (この下から) > >@echo off >onigsed -n "/^#script/,/^#end/p" %0|jgawk -f - batPATH.txt & pause & goto:eof >#script >BEGIN{IGNORECASE=1} >$0~/^[^\t]+/{ > if(NR==1 && $0~/^ *<再> *$/){next} > else if(NF==1){title=$1} > else{title="区分無し"} > if(strlen<length(title)){strlen=length(title)} > if(!(title in head)){list[++n]=title} >} >{ > if($NF~/\.bat *$/){ > head[title]+=1 > sum+=1 > if(numlen2<length(head[title])){numlen2=length(head[title])} > } >} >END{ >sline=\ >"------------------------------------------------------------" >wline=\ >"============================================================" > numlen1=length(n) > base_str="[] の外変は個です。" > rcnt=numlen1+strlen+numlen2+length(base_str)+2 > print substr(wline,1,rcnt) > print "※ 登録外変数の確認" > print substr(wline,1,rcnt) > for(i=1;i<=n;i++){ > printf("[%0*d] %-*sの外変は%0*d個です。\n", > numlen1,i,strlen,list[i],numlen2,head[list[i]]) > print substr(sline,1,rcnt) > } > print "合計 " sum " 個です。\n" >} >#end まだ、こちらまで手が回らない状況です。 色々と、ありがとうございます。 |
▼R.Nさん: こんにちは。 下記でも出来るみたいです。 以前、Lite & Seen Liteさんに教えて頂いた方法を 元に書いてみただけですけれども。 これが一番簡単かも? 1行目 @echo off 2行目 more +2 %~f0|jgawk -f - batPATH.txt & pause & goto:eof 3行目 BEGIN{IGNORECASE=1} 4行目 $0~/^[^\t]+/{ (以降省略) つまり、 @echo off more +2 %~f0|jgawk -f - batPATH.txt & pause & goto:eof BEGIN{IGNORECASE=1} $0~/^[^\t]+/{ if(NR==1 && $0~/^ *<再> *$/){next} と記述します。 |
▼いっちさん:こんにちは、 今度は、素直に動いてくれました。 gawkm115を使ってて、System32に置いてるのですが、不思議です。 すみません。 gawk-4.1.3-w32も入れてみたのですが、新しいエラーが出て、また、戻してしまいました。 動作する外変もあるのですが---? |
▼R.Nさん: こんにちは。 > gawk-4.1.3-w32も入れてみたのですが、 > 新しいエラーが出て、また、戻してしまいました。 > 動作する外変もあるのですが---? 私は、そのバージョンは利用した事は無いですが、 gawk-4.1.0-bin.zipなら https://code.google.com/p/gnu-on-windows/downloads/list からダウンロードして、ファイル名をgawk4.exeにリネームし 使えるようにしています。 全角文字を1文字目にしてprintする場合の注意事項 (↑これは、Lite & Seen Liteさんのホームページに書かれていました。) さえ守れば、エラーがでることは無いのですが、 今回の「登録数の確認.bat」は、明らかに > gawkm115 の仕様で作ってしまっていますので、 > gawk-4.1.0 で出力してみると、ちょっとがっかりした結果になってしまいます。 > gawkm115 は、仕様が解りやすいですね。 |
▼いっちさん: >全角文字を1文字目にしてprintする場合の注意事項 >(↑これは、Lite & Seen Liteさんのホームページに書かれていました。) >さえ守れば、エラーがでることは無いのですが、 そう言われてみると、 print to "standard output" failed (Arg list too long) のエラーが出てました。 余談ですが、gawk-4.1.3-w32のgawk.exe(jgawk.exe)をSystem32にいれて、実行すると、"DLL"がないとエラーが出たので、付属の"DLL"をSystem32に入れたのですが、"ダメ"↓?で、 環境変数で"DLL"にPATHを通したら"Ok"でした?。 |
▼R.Nさん: こんにちは >余談ですが、gawk-4.1.3-w32のgawk.exe(jgawk.exe)をSystem32にいれて、実行すると、"DLL"がないとエラーが出たので、付属の"DLL"をSystem32に入れたのですが、"ダメ"↓?で、 >環境変数で"DLL"にPATHを通したら"Ok"でした?。 OSが64bitの様で、gawk自体は32bitなので、System32 ではなく、SysWOW64 に入れた方がいいかもしれません。 64bitOS上で、32bitアプリがSystem32にアクセスしようとすると、SysWOW64にリダイレクトされます。 試してみたところ、System32では同じくDLLが見つからない旨のエラーが出ましたが、SysWOW64ではエラーが出ませんでした。 |
▼LAさん:こんにちは、 >OSが64bitの様で、gawk自体は32bitなので、System32 ではなく、SysWOW64 に入れた方がいいかもしれません。 >64bitOS上で、32bitアプリがSystem32にアクセスしようとすると、SysWOW64にリダイレクトされます。 検証までして頂き、ありがとうございます。 それなりの理由はあるのでしょうが、転送するのなら、System32は必要ないのでは、と思ってしまいました。 |
▼LAさん: >それなりの理由はあるのでしょうが、転送するのなら、System32は必要ないのでは、と思ってしまいました。 ちょっと調べてみたら、謎が解けました。 http://piyopiyocs.blog115.fc2.com/blog-entry-869.html |
こんにちは。 > > gawk-4.1.0 > で出力してみると、ちょっとがっかりした結果になってしまいます。 と自分で書いておきながら、本当だろうかと少し調べて試してみました。 > gawk-4.1.3-w32 でやってみました。 ちゃんと出力するような気がします。 気のせいかもしれませんけれども。 ※gawk.exeは、gawk4.exeにリネームしています。 ↓ 登録数の確認_gawk4.bat(この下から) @echo off more +2 %~f0|gawk4 --characters-as-bytes -f - batPATH.txt & pause & goto:eof BEGIN{IGNORECASE=1} $0~/^[^\t]+/{ if(NR==1 && $0~/^ *<再> *$/){next} else if(NF==1){title=$1} else{title="区分無し"} if(strlen<length(title)){strlen=length(title)} if(!(title in head)){list[++n]=title} } { if($NF~/\.bat *$/){ head[title]+=1 sum+=1 if(numlen2<length(head[title])){numlen2=length(head[title])} } } END{ sline=\ "------------------------------------------------------------" wline=\ "============================================================" numlen1=length(n) base_str="[] の外変は個です。" rcnt=numlen1+strlen+numlen2+length(base_str)+2 print substr(wline,1,rcnt) print "\b※ 登録外変数の確認" print substr(wline,1,rcnt) for(i=1;i<=n;i++){ printf("[%0*d] %-*sの外変は%0*d個です。\n", numlen1,i,strlen,list[i],numlen2,head[list[i]]) print substr(sline,1,rcnt) } print "\b合計 " sum " 個です。\n" } |
訂正させてください。 --characters-as-bytes を用いている為、 > print "\b※ 登録外変数の確認" > print "\b合計 " sum " 個です。\n" の\bは、不要でした。 Lite & Seen Liteさんのページを見ていて気が付きました。 何度も投稿してすみません。 |
▼いっちさん: こんにちは いろいろと、参考になります。ありがとうございます。 >--characters-as-bytes を用いている為、 ここで、ダメ文字の問題が気になりました。 AWKでは、文字列中の\(:0x5C)が特殊の意味を持つので、2byte文字をばらしてそれが出てくるような文字(Shit-JISで、ソIV圭構十表申貼能予禄暴 etc)で、問題が起る可能性があります。 という事で、gawk4.1.3で、 少し試してみました。 変更箇所: 登録数の確認_gawk4.bat:27> s="※ 登録外変数の確認表です。" print s batPATH.txt:2> 分類IXnI 結果: gawk4: -:25: warning: escape sequence `\・ treated as plain `・ =============================== ※ 登録外変数の確認表ナす。 =============================== [1] 分類IXnIの外変は6個です。 ------------------------------- 合計 6 個です。 となり、 スクリプト内の記述では、警告が出、ダメ文字の影響を受けていますが、 外部ファイルで読込んだ場合は、ダメ文字の影響を受けていません。 スクリプト内だけなら、その文字を使わないようにすればいいので、--characters-as-bytesでも、わりと問題なしの様ですね。 |
▼LAさん: こんにちは。 > --characters-as-bytesでも、わりと問題なしの様ですね。 ご確認ありがとうございます。 スクリプト内でダメ文字を使いたい場合、どうしたら効率よく ダメ文字をエスケープできるか考えてみました。 テラパッドツールを利用させて頂くのが、一番簡単な方法の ような気がしています。 http://harpy.jp/Tategoto/menu.html の中の http://harpy.jp/Tategoto/terapad/ にあるTpAddYenです。 テラパッドというエディタは、普段はあまり使わないのですが、 たまに便利な時あるんですね。 |