第5話 他の方法

--------------------- 第5話 他の方法 --------------------------

はじまり、はじまり~。

<Liners・・・! アンタねあんまりビックリさせないでよね。>
<こう見えても意外にデリケートなんだからね>
なに興奮して自分のこと暴露してんの? コレにはまだ続きがあるんだ。

<まだこのネタで引っ張る気?>
まあまあ、たまには過程を聞くのもオツなものだよ。
あんまり遅いので実用域を探ったスクリプトがある。参考までにだけど。

<仕方ないわね。今回だけなんだからね。>
<へぇ~色々頑張ってるのね。見直したぞお前!>
褒めているのか、けなしているのか?

この結果から、通常の配列とFGETで十分なスピードだね。
下手にセーフ配列などを使うと10倍遅くなってしまう。
バイナリサーチは今回の場合は過剰だね。

<セーフ配列は通常配列より、かなり遅いのね>
その通り、速度を重視する場合は要注意だ。
もともとデータを内包するのが事の発端だけど、あまり余計なことを
しない方が、いい気がするね。

<デモデモぅ、アタシとしてはソノおかげて面白いスクリプトが見られた訳だから>
<価値があったわよね。>
こ、コイツぅ自分中心かよ。

<じゃあ次のお題わぁ~>
もう次かよ!

<あっ!そうそうFGET版は何秒だっけ?>
コメント行に書いてあるよ。

<そう。「FGET:250-360ミリ秒・・・ 連想配列:0.031ミリ秒」?? ってなに?>
ああソレ?データ2000件の平均値。5000件でもほとんど変わらないけど個々の値は
変動するから遅い方を取り上げてみた。

<じゃあ何?場合によっては1億倍以上もありえると?>
1億倍はショッチュウ出てたよ。実は1万件のデータで試したけど、遅すぎて諦めた。
その時は、途中でも確か12億倍速だった気が・・・

<ストッピッ! 桁違いどころか単位自体が違うんでですけど。しかも億単位で。>
<ま、まあいいわ。今回は例外中の例外って事で、許してあげるんだからね。>
何をどう許すんだか。 この他にもbetweenstr版とかあったけど遅すぎたね。

<なんて奴なの。こんな爆速スクリプトを書いておきながら、さらに実用域を求めてる>
<・・・今回はタマタマ高速化が出来ただけで、騙されないんだからね!>
いや、単に実際の掲示板の例を取り上げただけなんですけど。

<こんな実力はありえないわ。た、単に速くなっただけじゃない!>
<もうこんなネタで騙されないわ!次よ次! そうそうコレが良いわ。>
<「PDFファイルをまとめる」コレならオリジナルはないし、妙な技法は使えそうもないわ>
<次はこれよ!分かった?>

あい? なんでお題まで指定されるのかな?しかも最もヤヤコシイのを。
<えへへ。コレで化けの皮が剥がれるわ。大した実力ではない事がね。楽しみ楽しみ!>


----------------------------------------------------------------------

提供は:課題まで指定される。Linersでした。

----------------------------------------------------------------------

// TextBlockをデータブロックとしての活用例が少ない為、サンプルを作成(外部データ[CSV]を取り込む場合の例)
// あえて非バイナリ、非FGETで高速化を目指します
// オリジナル:164秒  FGET:250-360ミリ秒  バイナリ:1.02ミリ秒  連想配列:0.031ミリ秒
// 目標:2秒以下 結果:4秒(セーフ配列)    通常配列に入れ直し:370-450ミリ秒
// tokenの活用 配列が短い場合は速い 286ミリ秒

SC = CreateOleObj("ScriptControl")
SC.Language = "VBScript"

dim a[3000]
old = gettime()*1000+G_TIME_ZZ


//str = replace(vn銘柄辞書, "<#cr>", "~")
//s = SC.Eval("Split(<#DBL>" + str + "<#DBL>,<#DBL>~<#DBL>)")
//l=length(s)
//resize(a, l + 1)

str = replace(vn銘柄辞書, chr(10), "")
l = 0

while str <> ""
    l = l + 1
    a[l] = token("<#cr>", str)
wend


//for i = 1 to l
//    a[i] = s[i-1]
//next
msgbox("準備時間: " + (gettime()*1000+G_TIME_ZZ - old) + "ミリ秒")

検索文字 = 225

old = gettime()*1000+G_TIME_ZZ

for i = 1 to l
  p = a[i]
  検査数字= token(",",p)
  ifb 検索文字 <=val(検査数字) then //次行の当社コードを検索文字にする
    n = i
    break
  endif
next

msgbox(gettime()*1000+G_TIME_ZZ - old + "ミリ秒<#cr>" + a[n])


TEXTBLOCK vn銘柄辞書
10,ABT,v0010,ベンチェー水産㈱ ,食料品,v3ホーチミン,Bentre Aqua Prod
// (途中略 この間約2000行のデータ)
140,BPC,v0140,ビムソン・パッキング㈱ ,梱包・包装,v3ホーチミン,Bim Son Packing
220,CYC,v0220,チャンイー・セラミック㈱ ,建材,v3ホーチミン,Chang Yih Cerami
230,DCC,v0230,デスコン工業建設㈱ ,建設,v3ホーチミン,Descon Construct
ENDTEXTBLOCK