過去の桐井戸端BBS (桐ver.9)
27391 cmd間で変数を受け継ぐために変数ファイル(VAR)を使っているが未定義エラーになる くもん 2004/08/15-12:01
AAA.cmd・BBB.cmd2つのcmdでCCC.varを変数書き出し、変数読み込みで使用しています。
AAA.cmdで固有変数&DDDをCCC.varへ書き出し、かきだされたことを確認しました。
そのあと2つのcmdの変数宣言から&DDDを削除しました。
そして2つのcmd間を往き来していると変数読み込み後の位置にもかかわらず
&DDDが変数未定義のエラーになります。変数読み込みついてのヘルプでは
"読み込んで宣言し書き出した時の値に設定する"となっています。
なぜ書き出し読み込みを実行しているのに未定義エラーになるのでしょうか。
(同一変数であることは確認済み)よろしくお願いします。

27392 Re:変数ファイル(VAR)について うにん 2004/08/15-14:26
記事番号27391へのコメント

>そして2つのcmd間を往き来していると変数読み込み後の位置にもかかわらず

「一括処理実行」コマンドを使ってるのでは?
「最後の表を開いたあとに宣言した固有変数は、すべて削除されます。」
27393 Re:変数ファイル(VAR)について くもん 2004/08/15-17:38
記事番号27392へのコメント
うにんさん

>>そして2つのcmd間を往き来していると変数読み込み後の位置にもかかわらず
>
>「一括処理実行」コマンドを使ってるのでは?
その通りです。
>「最後の表を開いたあとに宣言した固有変数は、すべて削除されます。」

前行のことは理解できますが、一旦変数書き出しで書き出した内容の変数まで
削除されるのでしょうか。
私見では、削除される以前に変数書き出しで書き出しておけば、削除されたのちでも
変数読み込みで読み込むことにより、宣言され値が設定されると思っていましたが間違いなのでしょうか。
Ver5の当時問題がなかった様な気がしますが、
思い違いでしょうか。

27394 Re:変数ファイル(VAR)について 佐田 守弘 2004/08/15-21:28
記事番号27393へのコメント
くもんさん

●書き出した変数ファイルの内容
最初に、確認ですが、最初の質問文に
 >AAA.cmdで固有変数&DDDをCCC.varへ書き出し、かきだされたことを確認しました。
と書かれておりますが、確認したのは、変数ファイルができていることでしょうか。
変数ファイルの内容も確認されたでしょうか。

変数ファイルは単純なテキストファイルなので、適当なエディタかメモ帳で開けます。
変数ファイルを開いて、目的の固有変数(&DDD)が書き出されているかを確認して下さい。

私の想像では、変数ファイルは書き出されていても、この中に目的の変数が書き出されていないのではないかと思います。

●もし書き出されていないとしたら
変数を書き出す一括処理をどの様に実行したのかをお知らせ下さい。
またその変数の宣言と値の代入はどの様に行いましたか?

表を開いて変数を宣言し、この状態でファイルパレットから、ないしはExplorerなどから
変数を書き出す一括処理を実行したのであれば、次の様になります。

一括処理を実行すると、実行のために新しい桐のプロセスが作られます。
この桐環境は、表を編集している桐環境とは別になり、表を編集している桐環境の変数は反映されません。
この状態で変数を書き出すと、固有変数が全く定義されていない状態での変数ファイルが書き出されます。

●その理由として
 >Ver5の当時問題がなかった様な気がしますが、思い違いでしょうか。
に答える事になります。桐ver.5と現在の桐と大きく違う点は、複数の表を開いたり一括処理を実行したりできる点です。

しかし一括処理は、予め予定通りのプログラムで決まったことを決まった手順で実行する機能です。
もし、桐が実行している他の仕事の影響を受けると、障害を起こすこともあり得ます。
例として言えば、現在編集中の表ないしフォームである固有変数、ないし共通変数を定義して使っているとしましょう。
その値が新たに実行される一括処理に反映されてしまうと、様々なエラーや不都合を起こすことは想像できると思います。

このため一括処理を実行したり、桐のアイコンをダブルクリックすると(一括処理を実行することもあり得る)
新しい桐のプロセスが作られます。
これは外見的にはタスクバーにもう1つの桐が表示された状態です。
そしてそれぞれの桐のプロセス(要するにタスクバーのアイコン)どうしは、独立した桐環境で、変数などを含めて独立になります。

佐田守弘(KS-00119)
27395 補足:コマンドで変数を書き出す方法 佐田 守弘 2004/08/15-21:34
記事番号27394へのコメント
追加補足です。

●表編集の会話処理から変数を書き出す場合
メニューから変数書き出しを実行するのが通常の方法です。
ファイルメニューからの「一括処理実行」でうまく行くかどうかは試していません。
(別プロセスにならない様なので、可能かも知れません)

●フォームから書き出す場合
イベントで書き出して下さい。イベントなら現在の変数を書き出せます。

佐田守弘(KS-00119)
27396 Re:変数ファイル(VAR)について 悲しげ 2004/08/15-22:02
記事番号27393へのコメント
>AAA.cmd・BBB.cmd2つのcmdでCCC.varを変数書き出し、変数読み込みで使用
>しています。AAA.cmdで固有変数&DDDをCCC.varへ書き出し、かきだされたこ
>とを確認しました。そのあと2つのcmdの変数宣言から&DDDを削除しました。

この部分を記述どおりに読むと、「2つのcmdの変数宣言から&DDDを削除」してしまったと云うことは、
その後にcmdを起動した際に、そもそも変数&DDDを
宣言していないことになり、未宣言の変数を書き出し/読み込みすることになるので、
未定義エラーになるのは当然のような気がします。
もしそうだとしたら、少なくとも初めの(?)cmdの方では「&DDD」とやらを変数宣言しておく必要があるのではないでしょうか?
あるいは、変数ファイルとして正しく書き出されていて且つ変数値も固定なら、
初めの(?)cmdの方でも、変数書き出しは無用で、変数読み込みだけでよいことになります。
※ついでに云えば、配列変数は変数読み込みできなかったと思います。

ところで・・・・
Win桐の場合、「固有変数」であれば、特に変数読み込み/書き出しをしなく
ても、複数の一括処理間で変数を共用できたのではなかったでしたっけ?
(V5でなら「共通変数」でなければなりませんでしたが)

27397 Re:変数ファイル(VAR)について 佐田 守弘 2004/08/15-23:00
記事番号27396へのコメント
悲しげさん

>ところで・・・・
>Win桐の場合、「固有変数」であれば、特に変数読み込み/書き出しをしなく
>ても、複数の一括処理間で変数を共用できたのではなかったでしたっけ?
>(V5でなら「共通変数」でなければなりませんでしたが)

きちんと試してはいないのですが、次の様な場合には、共用できると思います。
・桐を起動する。その桐で変数を定義する。
・その桐の中でファイルメニューから一括処理Aを実行する。
・一括処理Aが終了してから、続けて、一括処理B、Cと実行する。
この場合には、一括処理A、B、Cなどで固有変数も共用できると思います。
ここで、一括処理Aの中で定義した固有変数も、一括処理Aが終了した段階でも有効だったと思いましたが。

しかしちょっと様子が異なるのは、一括処理Aが終了しないうちに一括処理Bを起動する場合です。
多分、ファイルメニューからの一括処理の実行は、実行中の一括処理が終了しないうちには
選べないのでは(詳しく調べておりません。)。

もし一括処理を直接実行すると、別プロセスの桐になるので、変数は引継がれないはずです。

佐田守弘(KS-00119)
27401 Re:変数ファイル(VAR)について くもん 2004/08/16-09:43
記事番号27397へのコメント
皆様いつも有難うございます。
私は桐を終了後再起動した場合に以前の一部の固有変数値を使用したいのです。
又共通変数は使用したくないのです。こんな前提なのです。
いろいろ試しましたところ以下のように感じです。
A 固有変数を書き出したCMDから一括処理実行で呼び出した当該変数が宣言されてい
 ない別のCMDで変数読み込みを行った場合は変数は宣言され値が設定されます。
B 固有変数を書き出したCMDから一括処理実行で呼び出した当該変数が宣言されてい
 ない別のCMDで別の変数を変数書き出しした場合はその時点で変数宣言されていな
 い固有変数は変数ファイルからすべて削除されるようです。よって当該固有変数
 は宣言されず当然のことながら変数値は得られません。
C 変数書き出しを実行する場合変数ファイルの中の固有変数を削除させたくなけれ
 ば前もって変数を宣言しておくことが必要。

以上のように思われますがいかがでしょうか。よろしくお願いします。

27403 Re:変数ファイル(VAR)について うにん 2004/08/16-12:12
記事番号27401へのコメント

>B 固有変数を書き出したCMDから一括処理実行で呼び出した当該変数が宣言されてい
> ない別のCMDで別の変数を変数書き出しした場合はその時点で変数宣言されていな
> い固有変数は変数ファイルからすべて削除されるようです。

呼び出された時点で固有変数が削除されるので、
同じ変数ファイルに上書きしたら当然そうなります。
簡単にいえば

固有変数1.CMD
変数読み込み "固有変数",固有
変数管理

一括処理実行 "固有変数2"

固有変数2.CMD
変数管理

として固有変数1.CMDを実行してみればわかります。
「最後の表を開いたあとに宣言した固有変数は、すべて削除されます」なので、
*のところで表を開くと削除されなくなります。

>C 変数書き出しを実行する場合変数ファイルの中の固有変数を削除させたくなけれ
> ば前もって変数を宣言しておくことが必要。

宣言するのではなく読み込みでいいです。その時々に違う変数群を保存したいなら
上書きでなく別のファイルに書き出せばいいのでは?

27404 Re:変数ファイル(VAR)について KH 2004/08/16-12:14
記事番号27401へのコメント
>私は桐を終了後再起動した場合に以前の一部の固有変数値を使用したいのです。
>又共通変数は使用したくないのです。こんな前提なのです。

 自分もそのような使い方をしていますのでお気持ちが解るような気がします。
 ピントがずれているかも知れませんが、変数読み込み/書き出しコマンドを使った場合、
 私は両方に同じ固有変数の変数宣言をしています。理屈はわかりませんが、それで何ら
 問題ありません。なぜわざわざ消すのか解りません。もう1つのCMDに飛んだ時点で
 ゴワサンデになりますから。

 ピンとズレていたらごめんなさい。
27405 Re:変数ファイル(VAR)について 悲しげ 2004/08/16-12:16
記事番号27401へのコメント
変数書き出しのヘルプによれば
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
●すべての変数を、変数ファイルに書き出します。
変数書き出し "Address.var", *
または
変数書き出し "Address.var"

●共通変数と固有変数を、変数ファイルに書き出します。
変数書き出し "Address.var",共通,固有

●指定した変数だけを、変数ファイルに書き出します。
変数書き出し "Seiseki.var",{ &合計値,&平均値,&最大値,&最小値,&件数 }
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
と記載されています。
で、もしかするとくもんさんは2番目のようなやりかた(但し「固有」のみ)
を使っているのでしょうか?
とすると、これを複数のcmdで使い回すには、状況如何では不定要素がかなり多くなってしまうような気がします。
だから私はふだんは3番目の記述、すなわち指定した変数だけを指定したvarファイルに書き出したものを利用しています。

で、必要に応じて例えば
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
if(#変数"某代表的変数名1"="")
 変数読み込み "某.var"
end
if(#変数"某代表的変数名2"="")
 変数読み込み "某2.var"
end
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
とか。こうすると、不定要素はありません。

どうしても2番目の記述、すなわち「全ての」固有変数を書き出したいので
あれば、「宣言漏れ」をチェックする仕掛けを検討する必要があるかも?

27406 Re:変数ファイル(VAR)について くもん 2004/08/16-18:22
記事番号27405へのコメント
悲しげさん
>変数書き出しのヘルプによれば
>TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>●すべての変数を、変数ファイルに書き出します。
>変数書き出し "Address.var", *
>または
>変数書き出し "Address.var"
>
>●共通変数と固有変数を、変数ファイルに書き出します。
>変数書き出し "Address.var",共通,固有
>
>●指定した変数だけを、変数ファイルに書き出します。
>変数書き出し "Seiseki.var",{ &合計値,&平均値,&最大値,&最小値,&件数 }
>LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
私も3番目を使用して変数名を指定して書き出しております。
とりあえず変数値を共用する場合関係するCMDの最初の方で共用する変数を宣言し引き続き変数読み込みを実行するこ
とにします。こうしておくことで一応期待通りゆきそうに思います。
後刻皆さんより頂いたコメントを頼りにいろいろやってみたいと思っています。
うにん様、佐田様、悲しげ様、KH様 有難うございました。今後もよろしくお願い致します。
27408 Re:変数ファイル(VAR)について うにん 2004/08/16-19:46
記事番号27406へのコメント

>とりあえず変数値を共用する場合関係するCMDの最初の方で共用する変数を宣言し引き続き変数読み込みを実行するこ
>とにします。

読みこむファイルに必要な変数が全部入っているなら、宣言は不要です。

しかし共用する変数ならわざわざ固有にしなければ楽だと思うのですが?
固有変数が「一括処理実行」コマンドで削除されるというのは、一括処理ごとに「固有」であるべき変数が
引き継がれてしまって変な値になることを避ける意味だと思うのです。
(変数宣言で初期化もできるようになったので、今となってはあまり必要ない?)

変数値を共用するものは独立した一括処理でなく「手続き」にして呼び出す方が自然かも?

27409 Re:変数ファイル(VAR)について くもん 2004/08/16-20:42
記事番号27408へのコメント
うにんさん
>
>>とりあえず変数値を共用する場合関係するCMDの最初の方で共用する変数を宣言し引き続き変数読み込みを実行するこ
>>とにします。
>
>読みこむファイルに必要な変数が全部入っているなら、宣言は不要です。
>
>しかし共用する変数ならわざわざ固有にしなければ楽だと思うのですが?
>固有変数が「一括処理実行」コマンドで削除されるというのは、一括処理ごとに「固有」であるべき変数が
>引き継がれてしまって変な値になることを避ける意味だと思うのです。
>(変数宣言で初期化もできるようになったので、今となってはあまり必要ない?)
>
>変数値を共用するものは独立した一括処理でなく「手続き」にして呼び出す方が自然かも?
>
おっしゃるとおりです。私があえてこの様なやりかたを固執しておりますのは次の3点によります。

1…一括処理を纏めすぎるとどうしてもサブルーチンなど多用することからトラブルが生じた場合の原因究明が
  難しくなる(私の技術レベルの問題もありましょう)
2…一方一括処理を分割(独立したCMD)したため共通変数を使用すると意図しない変数名の重複使用により思わぬトラブル
  を招くことがある。(これまた私の技術レベルの問題もありましょう)
3…Ver5当時の資産(と云えるほどのものでもありませんが)も残っており私の癖でもあります。

以上のようなことも将来改善を図らなければとも考えております。よろしくご指導お願いします。

戻る