« VBScriptやVBAのSplit()関数の代替関数 | トップページ | VBScriptの配列は、漸増が遅い。 »

2008年5月 8日 (木)

VBScriptやVBAのSplit()関数の代替にJScriptを使う。

ScriptControl経由でJScriptのStringオブジェクトのsplit()メソッドを使う。

split()メソッドの結果は、JScriptのArrayオブジェクトなので、これをVBScriptの配列に変換します。

a=String(1024*1024,"a")
t1=Timer
Set sc=CreateObject("ScriptControl")
sc.Language="JScript"
sc.AddCode "function split(s,p){return s.split(p);}"
set b=sc.CodeObject.split(a,"a")
Dim c()
ReDim c(b.length-1)
k=0
For Each d In b
  c(k)=d
  k=k+1
Next
MsgBox Timer-t1
'4.148438

For Eachで使う分には、VBScriptの配列にする必要はなく、JScriptのArrayオブジェクトのまま使えば、もっと速い。

a=String(1024*1024,"a")
t1=Timer
Set sc=CreateObject("ScriptControl")
sc.Language="JScript"
sc.AddCode "function split(s,p){return s.split(p);}"
b=sc.CodeObject.split(a,"a")
MsgBox Timer-t1
' 1.609375

JScriptのArrayオブジェクトのまま使うのが、お勧めです。

VBScriptの配列にするなら、代替関数のほうがよいでしょう。

« VBScriptやVBAのSplit()関数の代替関数 | トップページ | VBScriptの配列は、漸増が遅い。 »