getreg コマンドについて質問No.00512
横島 忠夫 さん 98/02/11 10:02
 

こんにちは, 秀まるおさん.

NT4.0の場合, スクリプトの getreg って
もの凄く挙動不審です.

openreg "CURRENTUSER", "Software\Yokoshima"
getreg "testkey", #test
closreg

とやって文字列を格納しようとすると
変なことが起こります.

"testkey" というキーがなかったり,
"testkey" の値が "" だったりすると
むちゃくちゃなものが代入されます.

それ以前に #testkey に何か代入されている
場合はそれが入ったり, カレントディレクトリ
のパスが入ったり, すでにクリアされてしまって
いるはずの前の一時変数が入ってしまったり
します.

""がきちんと代入されるときもあるので
いろいろやって確認していただけません
でしょうか?


95環境では起こらないみたいなのですが....

いつからこんなんなったかもよくわからない
のですが, 確認したのは

OS:NT4.0 + SP3 + IE4.01
秀Term : v4.28

です.


==========================

"testkey" が存在しない場合は以下のように
すると回避できるようです.

#test == ""
openreg "CURRENTUSER", "Software\Yokoshima"
getreg "testkey", #test
closreg

==============================


よこしま


[ ]
RE:00512 getreg コマンドについて質問No.00513
秀まるお さん 98/02/12 18:34
 
 まいどどうも。

 そもそもの仕様として、キーが無かった場合には変数には何も値を代入しない仕様
になっていました。(ってどこにも書いてないけど)

 それで、とりあえずレジストリの取得に失敗した場合には""または0を代入してし
まうようにします。

 あとあと、数値変数なのにレジストリには文字列が入っていたり、その逆だったり
しても何も代入せずに終わっていました。その辺も紛らわしいので数値に変換または
文字列に変換して何かを代入するようになおしておきます。


[ ]
RE:00513 getreg コマンドについて質問No.00516
横島 忠夫 さん 98/02/13 00:30
 
こんにちは, 秀まるおさん.

>  そもそもの仕様として、キーが無かった場合には変数には何も値を代入しない仕様
> になっていました。(ってどこにも書いてないけど)
>
>  それで、とりあえずレジストリの取得に失敗した場合には""または0を代入してし
> まうようにします。
>
>  あとあと、数値変数なのにレジストリには文字列が入っていたり、その逆だったり
> しても何も代入せずに終わっていました。その辺も紛らわしいので数値に変換または
> 文字列に変換して何かを代入するようになおしておきます。

えーと, 非常に不思議なのが,

#test == ""
openreg "CURRENTUSER", "Software\Yokoshima\Test"
getreg "test", #test
closereg
message #test


っていう風にやった場合, 「test」という文字列
がなかった場合は "" が返って来るんですが,
「test」という文字列の値が "" だった場合に

「C:\HideTerm\Upload」とかって秀丸が
作業中のパスが返ってきたりすることです.

これはNT環境でのみ起こります. 事情があって
IE4.0は捨ててしまって, 現在NTではIE3.02です.
(というか NTは最初からFull install されてしまった...)

ということで, 文字列の取得に失敗する云々では
なくて, 文字列の値が "" のときの問題って
気がしますが......


=================
現在は

if(value(#test) = 0))
       #test == ""
endif

っていう風にして回避しています. #testが日付なので...

=================

よこしま


[ ]
RE:00516 getreg コマンドについて質問No.00517
秀まるお さん 98/02/13 13:22
 
 いちおう"test"というキーが存在してない場合には何もしないので、#testという
変数にでたらめな変数が代入されるということは無いはずなんですが…

 こちらでテストしてみても、キーが存在しない場合にはたしかに#testには何も代
入してませんでした。

 いちど、getreg文の直後にmessage #testという文を入れてテストしてみてほしい
です。

 けど、次の版ではどっちにしてもキーが存在しなかった場合には""を代入するよう
にします。


[ ]
RE:00517 getreg コマンドについて質問No.00520
横島 忠夫 さん 98/02/15 12:49
 
こんにちは, 秀まるおさん.

> いちおう"test"というキーが存在してない場合には何もしないので、
>#testという変数にでたらめな変数が代入されるということは無いはず
>なんですが…

変なのは, "test"というキーが存在して, 値が""のとき
なんですが, 再現させるのが, なかなか難しいみたいです.

確実に再現できる手順がわかったら
あらためて報告します.

よこしま



[ ]