« jFileの不具合 | メイン | 気になる外変 »

2006年10月05日

●REM #cdって何?

「外部変形をダウンロードしたけど動かない」という質問の回答に良く出てくる

------------
REM #jw
REM #cd  <-ここを追加
REM #hm
------------

と、いうふうにBATファイルに「REM #cd」を書き加えて下さい。ってのが有りますよね。
これは何?? と、疑問に思った事ありませんか?

私も他所様の所から見たり聞いたりの事しか分かりませんが、間違っていたら指摘して下さい。


1)REM #cdの意味
外部変形を実行する時、BATファイルが有るディレクトリ(フォルダ)をカレントにする。
直接の意味は、こうゆう事です。

2)BATファイルが有るディレクトリをカレントにするって?
外部変形の仕組みで、(jwc_temp.txt)の重要性を書きました。
「REM #cd」の記述が有る場合は、この(jwc_temp.txt)を、BATファイルが有るディレクトリ(フォルダ)に作ります。
「REM #cd」の記述が無い場合は、(jwc_temp.txt)はJw_cadがインストールされているフォルダに作られます。
つまり、読み書きに行くjwc_temp.txtのパスが通っていなくて未実行になるのです。
つまり、外部変形を実行するため作業している部屋をその外変のBATファイルが有る部屋とする為の記述です。
こうする事でスクリプトファイルのパスを絶対パスで書く必要が無くなったり、その他複数のスクリプトファイルを扱う外部変形にも有効になってきます。

3)では何故最初から書いて無いファイルが有るの?
それは、Jw_cadや外部変形のルーツから探っていかなければならないと思います。
現在は「Jw_cad」といえば、大半の人はWindows版のJw_cadを指していると思います。
しかし以前は、DOS版Jw_cad(JWC)とWin版Jw_cad(JWW)と言っていました。当然、現在でもJWCとJWWは存在しますし、言い回しを使い分ける必要が有ると思いますが、私は最近Jw_cad=JWWの認識で書いてます。
DOS版の場合は、DOS版Jw_cad(JWC)と付け加えてます。

話しがそれましたが・・(^^ゞ 外部変形も、DOS版Jw_cad(JWC)の時代から当然ありました。
その、DOS版Jw_cadの外部変形には「REM #cd」という概念が無く(jwc_temp.txt)は、DOS版Jw_cadがインストールされているフォルダに作られました。

現在のWin版Jw_cadの外部変形は、DOS版Jw_cadの外部変形を元に作られて来たものだと思いますし、DOS版の外部変形でもほとんどWIN版で動いています。
中には例外も有るようですが・・??

最初に戻りますが・・
------------
REM #jw
REM #cd  <-ここを追加
REM #hm
------------
この最初の記述 REM #jw これがJw_cad用外部プログラムの宣言になります。
#jw の代わりに #jww を記述すると、Win版Jw_cad(JWW)形式になります。

お解りですよね。「REM #cd」が無いからと言ってそのプログラムは間違いでは無いのです。プログラムの宣言が
#jw の場合は、DOS版Jw_cad形式の外部変形ですから・・(って事ですよね?違っていたらツッコミを(^^ゞ)

逆を返せば #jww とJWW形式の宣言をしていて任意のフォルダに置くことが出来る外部変形には必ずこの REM #cd の設定がされているという事になります。
JWW形式の宣言をしていて、REM #cd の記述の無い外部変形は存在しない。という事です。
この事は、siegelさんに教わりました。<(_ _)>。。

4)でも有るよ?・・#jwwで、REM #cd の無いBATファイル
確かに、REM #jww とJWW形式のプログラムの宣言をした外部変形でも REM #cd の記述が無い物が有ります。
しかし、上の REM #cd の意味をもう一度良く理解して下さい。「BATファイルが有るディレクトリ(フォルダ)をカレントにする。」という事でしたよね。
REM #cd の記述が無くても、BATファイルの書き方で問題なく動作します。
例題は、ここ を見て下さい。(jwc_temp.txt)を吐き出すパスを指定しているのです。
REM #cdを書かなくても、上の例題のようにAWKファイルの存在する場所を絶対パスで記述する方法です。
「外変が動かない」という質問に、このパスの記述を書き換える必要が有ることも確かです。
(^_^;)・・ちょっと難しくなっちゃいましたかね?
他にも、Snap_kinさんの場合も有るのですが、Snap_kinさんの場合は、「 G+ for Jww」を使う事を前提に作られていますので必要無いんです。
Snap_kinさんの外変を単独で使用する場合の例題を ここ に書いておきました。
全ての事柄は、外変をダウンロードした時に添付されている説明書に書かれています。
この説明書を熟読することが解決の一歩だと思いますよ。


◆ 参考文献 ◆
  Jw_cad 徒然草-3 内 REM #cd

◆ 謝辞 ◆
 何箇所かの間違いを指摘して下さった タールさんに感謝申し上げます。

◆ このエントリーの初筆日 ◆
  2006/02/09

コメント

>2)BATファイルが有るディレクトリをカレントにするって?
(略)
>つまり、読み書きに行くjwc_temp.txtのパスが通っていなくて未実行になるのです。

これは違います。
外部変形のソースファイルが見あたらないからです。
jwc_temp.txtが見あたらないのではないです。

さらにおかしな所があったので報告します。

>4)でも有るよ?・・#jwwで、REM #cd の無いBATファイル


>REM #cd の記述が無くても、他でカレントディレクトリにさせる記述が必ず有ります。
>例題は、ここ を見て下さい。(jwc_temp.txt)を吐き出すパスを指定しているのです。

ここのリンク
http://www.tmk-s.com/gaihen/batgnomon.html

>jgawk -f c:\jwgaibu\K_DANMEN\KHGATA.AWK temp.txt %2 %3 %4 %5 %6 %7 %8 %9> jwc_temp.txt


これはカレントディレクトリにさせる記述ではなくソースファイル(AWK)の
ありかを指定する記述であり、
カレントディレクトリは変わりませんし、
jwc_temp.txtの吐き出しを
指定する物でもありません。


marusanさん、
つっこみの時ばかりに出てきてすみません。
どうしても指摘せざるえない。ほおってはおけない時に出てきます。
私はネットのつながりの価値は、クールに仲間を評価しあい、ダメなところは
はっきり「ダメだ」と言えるのが、最も価値のある点だと思ってます。
実際にOFF会等で合ってしまうとなかなか言えませんから、、
(だから私はOFF会にはいかない。余談)


あと、、
>3)では何故最初から書いて無いファイルが有るの?

これに対するアンサーが無いような気がしますが。。。


あ、タールさん、こんにちは。
ちょっとご無沙汰です。m(__)m。。

> つっこみの時ばかりに出てきてすみません。

いえいえ。(-- )( --)(-- )( --)
この指摘が、未だ勉強不足の私にはありがたいです。(^_^;)


> 外部変形のソースファイルが見あたらないからです。

ふむ。。。(・・?
ここで言う「外部変形のソースファイル」ってのは・・具体的には何?
EXE、AWK、Ruby の事なのですか?

どうも、JWW→BAT→EXE→BAT→JWW の構図は理解しているつもりなのですが、細かな内容が理解出来ないんです。
私の考えでは、REM #cd の記述が無い場合
1・JWWで外部変形のBATファイルの指示通りデータを選択する。
  ↓
2・JWWがそのデータをテンポラリファイル(jwc_temp.txt)という名前で書き出し保存します。
  ↓
3・その(jwc_temp.txt)というファイルを、任意のプログラムが見て自分に与えられた処理をする。
  ↓
4・その処理した結果を(jwc_temp.txt)へ書き出して処理された結果に変更する。
  ↓
5・今度は、その変更された内容をJWWが読み込み画面に作図する。

この2番で書出された(jwc_temp.txt)が外変BATの有るフォルダでは無く、jw_win.exe の有るフォルダ(c:\jww)に作られる為に
3番の「任意のプログラム」が(jwc_temp.txt)を探すことが出来ずに未実行になると解釈しているのですが・・
なので、こんな書き方になったのですが・・違うのなぁ?

> これはカレントディレクトリにさせる記述ではなくソースファイル(AWK)の
> ありかを指定する記述であり、
> カレントディレクトリは変わりませんし、
> jwc_temp.txtの吐き出しを
> 指定する物でもありません。

ハイ!! (●^o^●)
これは、理解しているつもりです。

・・あれ?そうすっと・・(jwc_temp.txt)の吐き出し指定は、誰が何処でやってるの?
1番目のタールさんの指摘もその事を指してるのかな?

ん~~~( ̄ー ̄?).....また頭の中が複雑になってきちゃいました。(^^ゞ
修行不足です。_/ ̄|○反省。。

marusanさん 遅くなって申し訳ないです。

まだ重要な事をつっこめていませんでした。

>2)BATファイルが有るディレクトリをカレントにするって?
>外部変形の仕組みで、(jwc_temp.txt)の重要性を書きました。
>この(jwc_temp.txt)を、BATファイルが有るディレクトリ(フォルダ)に作る。という意味です。

考え方がちがいます。
カレントフォルダ(作業するフォルダ)を、BATファイルのあるフォルダに移したから、
こそ、そのフォルダにjwc_temp.txtは吐き出されたのです。

この考え方が出来てないのが、誤解の発端な気がします。


>ここで言う「外部変形のソースファイル」ってのは・・具体的には何?
>EXE、AWK、Ruby の事なのですか?

ここでは .awk を指していました。
.exeだと実行ファイルと表現しています。

>3番の「任意のプログラム」が(jwc_temp.txt)を探すことが出来ずに未実行になると解釈しているのですが・・


ちがいます。
jwc_temp.txtはrem #cd があろうが無かろうが常にカレントフォルダに存在するので
「任意のプログラム」が(jwc_temp.txt)を探せないって事は普通の外変ではありえないです。

たとえば
> jgawk -f c:\jwgaibu\K_DANMEN\KHGATA.AWK temp.txt %2 %3 %4 %5 %6 %7 %8 %9> jwc_temp.txt
これを利用して説明すると、

カレントフォルダは
C:\jww

jgawk.exeはどこにあるか分かりませんが、pathが通っているので絶対パスの指定は不要。
KHGATA.AWKはpathが通っていないフォルダc:\jwgaibu\K_DANMEN\に存在するので絶対パスの指定は必要
temp.txt(jw_temp.txtをリネームしたもの)はカレントフォルダにあるから絶対パスの指定は不要。
jwc_temp.txtは絶対パスの指定がないからカレントフォルダに吐き出される。

と言うことです。


ちょっとまだ説明不足かもしれませんが、どうでしょう。

全然説明が足りてませんね。。汗
要は
jgawkがKHGATA.AWKを探せないのが問題なんです。

また明日にします。zzz

全然説明が足りてませんね。。汗
要は
jgawkがKHGATA.AWKを探せないのが問題なんです。

また明日にします。zzz

おはようございます。
まだ、ピンとこないでしょうか?


タールさん、おはようございます。

タールさんは、朝が早いというか・・夜が遅いというか・・
3:00のコメントでお休みに入って、8:00のコメントですか。
凄い生活ですね。(*^_^*)

> まだ、ピンとこないでしょうか?

はい。ヽ(^o^)丿 何となく疑問が解けてきました。
今迄、勘違いしていたようです。

旨く説明出来ないかもしれませんが・・
REM #cd を記述する意味は、外部変形を作業する場所(カレントフォルダ)を、その外部変形のBATファイルが有るフォルダにするだけで
jwc_temp.txtのパスがどうのこうの、スクリプトのパスがどうのこうの、って事じゃ無いんですよね。

jwc_temp.txt がBATファイルが有るフォルダに吐き出されても、Jw_cadがインストールされているフォルダに吐き出されても問題なく外部変形は動作する。
未実行になる要素は、この問題では無く「ソースファイル」(スクリプトと言って良いのでしょうか)のパスがうまく指定されていないから未実行になる。

外部変形を作業する場所(カレントフォルダ)がBATファイルの有る場所では無く、Jw_cadがインストールされているフォルダでも何故問題なく動くのか・・
という追求をすれば解ってくるような気がします。

このエントリー記事も修正させてもらいます。(何となく不安ですが・・(^^ゞ

>jwc_temp.txtのパスがどうのこうの、スクリプトのパスがどうのこうの、って事じゃ無いんですよね。

う~~む
スクリプト(.awk)のパスがどうのこうの言う問題です。
ここではawk外部変形を例に説明してますが、awkファイルを絶対パスでしていしなくていいように REM #CD行はあると考えた方がいいと思います。
さらに複数のawkファイルを使う外変batとかもありますし、gawk実行中の内部からさらに別のファイルを呼び出す場合もあります。

よって、外部変形のファイルがすべてあるフォルダをカレントフォルダとして実行するのが一番確実な方法なんです。


> スクリプト(.awk)のパスがどうのこうの言う問題です。

(^^ゞポリポリ
何回も申し訳有りません。m(__)m。。

了解しました。
完璧! と言えるかどうか分かりませんが、納得しました。
ありがとうございます。

現在、超突貫仕事に入っているので、ちょっとお時間を頂いて修正させて頂きますね。

コメントする