’(’がありません。の原因と解決方法【VBScriptエラー】 [VBScript]
スポンサーリンク
外部ファイルの指定忘れ
【原因】
配列の大きさを変更するPreserveステートメントのスペルに誤りがあった
×ReDim Perserve ARY(nCNT)
○ReDim Preserve ARY(nCNT)
【解決方法】
正しいスペルに書き直す
スポンサーリンク
関連記事
型が一致しません。の原因と解決方法【VBScriptエラー】
’(’がありません。の原因と解決方法【VBScriptエラー】
エンティティの参照に問題があります ー 対応する’;’が見つかりません。 の原因と解決方法【VBScript エラー】 [VBScript]
スポンサーリンク
原因 文中に""を記述してしまった
WSFファイル形式でVBScriptを記述する場合、で挟むが、その中に""が記述されてしまうと、そこをスクリプトの最後と認識してしまうから。
elmS = repStr(emS(2),"","")
スポンサーリンク
解決方法
たとえダブルクォーテーションで囲んだ文字列であっても、コメントであっても、そこをスクリプトの最後と認識してしまう。そこで下記のように"script"の前にある"/"の前に"\"を記述する。
elmS = repStr(emS(2),"","")
スポンサーリンク
関連記事
エンティティの参照に問題があります ? 対応する~が見つかりません。 の原因と解決方法【VBScript エラー】
型が一致しません。 の原因と解決方法【VBScript エラー】
型が一致しません。 の原因と解決方法【VBScript エラー】 [VBScript]
スポンサーリンク
原因 代入する変数の指定に誤りがある
Split()関数で出力される配列は、変数に代入しなければいけないところ、配列変数に代入してしまった。
例)時刻を代入する変数を配列で指定した。
×Dim timS(1)
timS = Split(tim,":")
スポンサーリンク
解決方法
誤って配列で指定した変数を、変数に書き換える。
例)時刻を代入する変数に書き換えて、コロンで時間と分に分割する。
○Dim timS
timS = Split(tim,":")
または、配列変数に代入するのであれば、要素番号もきちんと指定する。
timS(0) = Split(tim,”:”) でもOK。
スポンサーリンク
関連記事
エンティティの参照に問題があります ? 対応する~が見つかりません。 の原因と解決方法【VBScript エラー】
型が一致しません。 の原因と解決方法【VBScript エラー】
指定した間隔でカラーコードを作成する関数(再帰的プログラム)のサンプル VBScript [VBScript]
各桁が3,9,Fの16進数で組み合わされたカラーコードを作成し配列で出力する関数の例です。Sub(サブルーチン)で作成されるのが多い再帰的プログラムをFunctionで作成してみました。
concatARY関数は、2つの1次元配列を連結する独自関数です。
#333333
#333399
#3333FF
#339933
#339999
#3399FF
#33FF33
#33FF99
#33FFFF
#993333
#993399
#9933FF
#999933
#999999
#9999FF
#99FF33
#99FF99
#99FFFF
#FF3333
#FF3399
#FF33FF
#FF9933
#FF9999
#FF99FF
#FFFF33
#FFFF99
#FFFFFF
2つの1次元配列をの結合する関数です。
・inARY1:結合する配列1
・inARY2:結合する配列2
・outARY:戻り値。結合した配列
指定した間隔でカラーコードを作成する関数(再帰的プログラム)のサンプル VBScript
スポンサーリンク
サンプルプログラム
Function hex39F(cmpS,c)
Dim numS
Dim num6, d
ReDim num6(0) '配列の宣言
Dim m
m = -1
For d = 3 To 15 Step 6
cmpS(c) = hex(d) & hex(d) '数字を16進数に変換する
If c < UBound(cmpS) Then 'まだ3回ネストを繰り返していなければ
numS = hex39F(cmpS,c+1)
'd objLOG.WriteLine(Join(numS,";"))
If UBound(num6) = 0 Then '最初の出力であれば
num6 = numS '連結処理なし→配列を代入する
Else
num6 = concatARY(num6,numS) '2回目以降は配列を連結していく
End If
Else
If cmpS(0) <> cmpS(2) Then '前後2桁のコードが同じものは弾く
m = m + 1
ReDim Preserve num6(m) '配列の大きさを1つずつ大きくしていく
num6(m) = "#"& Join(cmpS,"")
'd objLOG.WriteLine(m &":"& Join(cmpS,""))
End If
End If
Next
hex39F = num6
End Function
concatARY関数は、2つの1次元配列を連結する独自関数です。
出力結果
#333333
#333399
#3333FF
#339933
#339999
#3399FF
#33FF33
#33FF99
#33FFFF
#993333
#993399
#9933FF
#999933
#999999
#9999FF
#99FF33
#99FF99
#99FFFF
#FF3333
#FF3399
#FF33FF
#FF9933
#FF9999
#FF99FF
#FFFF33
#FFFF99
#FFFFFF
スポンサーリンク
concatARY関数
2つの1次元配列をの結合する関数です。
・inARY1:結合する配列1
・inARY2:結合する配列2
・outARY:戻り値。結合した配列
Function concatARY(inARY1,inARY2)
Dim UB1, UB2
UB1 = UBound(inARY1)
UB2 = UBound(inARY2)
Dim outARY
ReDim outARY(UB1+UB2+1)
Dim a
For a = 0 To UB1
outARY(a) = inARY1(a)
Next
For a = 0 To UB2
outARY(UB1+1+a) = inARY2(a)
Next
concatARY = outARY
End Function
スポンサーリンク
関連記事
指定した間隔でカラーコードを作成する関数(再帰的プログラム)のサンプル VBScript
正規表現 [VBScript]
スポンサーリンク
連続する数字を取得する
\d+
ポイントは、"\d+?"ではなく、"\d+"を使うこと。
"\d+?"は、最短の文字列を取得するため、数字1文字ずつを取得してしまう。
例)文字列"1200円"に対して、"\d+?"を指定すると、"1", "2", "0", "0" と、一文字ずつ取得されてしまう。
カンマまたは小数点つきの連続する数字を取得する
[\d\,\.]+
ポイントは、"+?"ではなく"+"を使う点と、演算子には正規表現の予約文字があるため、その文字の前に"\"を付けること。
なお、カンマの前に"\"をつける必要はないが、明確に数字以外の文字として表すため、ここではあえてつけてみた。
数式(連続する数字と演算子)を取得する
[\d\+\-\*\/\=]+
ポイントは、"+?"ではなく"+"を使う点と、演算子には正規表現の予約文字があるため、その文字の前に"\"を付けること。
"+", "-", "*", "/", "=" 以外の演算子を含む場合は、追加していく。
文字数の異なる開始文字を取得する
スポンサーリンク
(ab|a|b)
""が開始文字を取得するための文字で、カッコ内が取得する文字。ポイントは、カッコ内に指定する文字の書き順で、優先順位の高い文字ほど左に書くこと。
例)先頭が"◎・", "◎", "・" から始まる文字列から、これらの記号を取り除く(""に置換する)場合、"(◎・|◎|・)"の順で記述する。誤って"(◎|・|◎・)"で記述してしまうと、"◎・"から始まる文字列は、"◎"しか置換の対象にならない。
スポンサーリンク
関連記事
正規表現