2009年4月アーカイブ

VBScriptの備忘録2。

未使用の変数は、型(値)が Empty になる。
Dim work
wscript.echo "VarType? " & VarType(work) '0
wscript.echo "TypeName?" & TypeName(work) 'Empty
wscript.echo "isEmpty?" & isEmpty(work) 'True

VarTypeは0、TypeNameはEmpty。

Emptyは暗黙の型変換で、数字 0 とも文字列 "" とも一致してしまう。
'---test3.vbs---
if (wk = 0) and (wk = "") then
wscript.echo "True" 'これが表示される
else
wscript.echo "False"
end if
'----
助かるような、困るような。
ちなみに、isEmpty()で明示的な確認が可能。
変数を明示的にEmptyにするにはそのまんま代入。
work = Empty

ちなみに,EmptyとNullは異なる。Null は 0や "" とは一致しない。
VarTypeは1、TypeNameはNull。
isNull()関数あり。 work = Null で代入可能。

| コメント(0) | トラックバック(0) | カテゴリ [ Windows : バッチ・スクリプト ]

備忘録。VBScript の落とし穴。
on error resume next を使うときは要注意。

下記を実行するとわかるが、(wk <> 0) AND (wk = 0) が成り立つように見えてしまう。

'---- test1.vbs
on error resume next
wk = ""
if (wk <> 0) and (wk = 0) then
wscript.echo "True??" 'here
else
wscript.echo "False"
end if
wscript.echo " error:" & err.Number '13
wscript.echo " " & err.Description '型が一致しません。
'-----

VBScript暗黙の型変換でも「長さ0の文字列」は 数字(Integer)に変換できない
ためにエラーとなるが、
if 文の条件内でのエラーは [on error resume next]のために成り立ったとして
進んでしまう模様。

類似のトラブルは、とにかく if文の条件 がエラーとなるとき。
関数が(スペルミスで)存在しないとか、オブジェクトが取得できないまま使っているとか。
on error resume next
if 0 = hogefail() then
  ' hogefail()が存在しないとエラー→Trueとなってしまう
if 0 = objectfail.count then
  ' objectfail の取得に失敗しているとエラー→Trueとなってしまう

ちなみに、[続き] に記載した test2.vbs や test3.vbs ならば"False"が表示される。
Integer の0は暗黙の型変換で文字列0に変換できるため。

| コメント(0) | トラックバック(0) | カテゴリ [ Windows : バッチ・スクリプト ]

アーカイブ

ウェブページ

Get Firefox

Get Firefox Get Thunderbird
Powered by Movable Type 4.261

このアーカイブについて

このページには、2009年4月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年1月です。

次のアーカイブは2009年5月です。