VBScriptで整数桁20を2^32で割ってみた
<seed_digits19.vbs>Inputデータ
Dim i
Dim strPathIn
Dim strPathOut
strPathOut = "digits19.txt"
Dim oADOST_R
Dim oADOST_W
Set oADOST_W = CreateObject("ADODB.Stream")
Dim adWriteChar: adWriteChar = 0
Dim adWriteLine: adWriteLine = 1
oADOST_W.Type = 2 '-1--adTypeBinary , 2--adTypeText
oADOST_W.Charset = "Shift-JIS"
oADOST_W.LineSeparator = -1 '-1CrLf , 10 Lf , 13 Cr
oADOST_W.Open
Dim a01
Dim a02
For i = 1 To 63000
a01 = CStr(Int(Rnd()*1000000000000000))
a02 = CStr(Int(Rnd()*10000))
oADOST_W.WriteText a01 & a02, adWriteLine
Next
Dim adSaveCreateNotExist: adSaveCreateNotExist = 1
Dim adSaveCreateOverWrite: adSaveCreateOverWrite = 2
oADOST_W.SaveToFile strPathOut, adSaveCreateOverWrite
oADOST_W.Close
Set oADOST_W = Nothing
MsgBox "処理終了"
<divide2_32.vbs>
Dim i
Dim strPathIn
Dim strPathOut
strPathIn = "digits19.txt"
strPathOut = "out2_digits19.txt"
Dim oADOST_R
Set oADOST_R = CreateObject("ADODB.Stream")
Dim adReadLine: adReadLine = -2
oADOST_R.Type = 2 '-1--adTypeBinary , 2--adTypeText
oADOST_R.Charset = "Shift-JIS"
oADOST_R.LineSeparator = -1 ' -1 CrLf , 10 Lf , 13 Cr
oADOST_R.Open
oADOST_R.LoadFromFile = strPathIn
Dim oADOST_W
Set oADOST_W = CreateObject("ADODB.Stream")
Dim adWriteChar: adWriteChar = 0
Dim adWriteLine: adWriteLine = 1
oADOST_W.Type = 2 '-1--adTypeBinary , 2--adTypeText
oADOST_W.Charset = "Shift-JIS"
oADOST_W.LineSeparator = -1 '-1CrLf , 10 Lf , 13 Cr
oADOST_W.Open
Dim a01
Dim a02
Do While Not oADOST_R.EOS
a01 = oADOST_R.ReadText(adReadLine)
oADOST_W.WriteText a01 & vbTab & func_dig20(a01), adWriteLine
Loop
Dim adSaveCreateNotExist: adSaveCreateNotExist = 1
Dim adSaveCreateOverWrite: adSaveCreateOverWrite = 2
oADOST_W.SaveToFile strPathOut, adSaveCreateOverWrite
oADOST_W.Close
Set oADOST_W = Nothing
MsgBox "処理終了"
Function func_dig20(myNum)
Dim myNum01
Dim myNum02
Dim myNum03
Dim myNum51(3)
Dim myNum52(3)
Dim bQuo2_16(3)
Dim bMod2_16(3)
Dim cQuo2_16(3)
Dim cMod2_16(3)
Dim myMod1(4)
Dim myMod2(4)
Dim flg_minus
If Instr(myNum,"-") > 0 Then
flg_minus = "1"
Else
flg_minus = "0"
End If
myNum01 = Trim(Replace(myNum,"-",""))
myNum02 = Right(String(20,"0") & myNum01,20)
myNum51(0) = Mid(myNum02,01,5)
myNum51(1) = Mid(myNum02,06,5)
myNum51(2) = Mid(myNum02,11,5)
myNum51(3) = Mid(myNum02,16,5)
myMod1(0) = myNum51(0)
For i = 0 To 2
bQuo2_16(i) = Int(myMod1(i) / 2^16)
bMod2_16(i) = myMod1(i) - (bQuo2_16(i) * 2^16)
myMod1(i+1) = bMod2_16(i) & myNum51(i+1)
Next
bQuo2_16(3) = Int(myMod1(3) / 2^16)
bMod2_16(3) = myMod1(3) - (bQuo2_16(3) * 2^16)
'myNum03 = Right(String(5,"0") & bQuo2_16(0), 5) & _
' Right(String(5,"0") & bQuo2_16(1), 5) & _
' Right(String(5,"0") & bQuo2_16(2), 5) & _
' Right(String(5,"0") & bQuo2_16(3), 5)
myNum52(0) = Right(String(5,"0") & bQuo2_16(0), 5)
myNum52(1) = Right(String(5,"0") & bQuo2_16(1), 5)
myNum52(2) = Right(String(5,"0") & bQuo2_16(2), 5)
myNum52(3) = Right(String(5,"0") & bQuo2_16(3), 5)
myMod2(0) = myNum52(0)
For i = 0 To 2
cQuo2_16(i) = Int(myMod2(i) / 2^16)
cMod2_16(i) = myMod2(i) - (cQuo2_16(i) * 2^16)
myMod2(i+1) = cMod2_16(i) & myNum52(i+1)
Next
cQuo2_16(3) = Int(myMod2(3) / 2^16)
cMod2_16(3) = myMod2(3) - (cQuo2_16(3) * 2^16)
func_dig20 = flg_minus & vbTab & _
Right(String(5,"0") & cQuo2_16(0), 5) & _
Right(String(5,"0") & cQuo2_16(1), 5) & _
Right(String(5,"0") & cQuo2_16(2), 5) & _
Right(String(5,"0") & cQuo2_16(3), 5) & _
vbTab & _
cMod2_16(3) * 2^16 + bMod2_16(3)
End Function
検証用 自己記事
VBScript上でADODB.ConnectionのSQLに無理言ってDecimal型計算してもらう
http://blog.goo.ne.jp/tkhs1732/e/2ba2dd2da565fa18aaf8a6082e9caf04