汎用機メモっとくか

しごと用の(学習メモ&お気に入り保存)。

VBScriptで整数20桁を2^32で割ってみた

2018年01月23日 02時54分14秒 | WSH

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


この記事についてブログを書く
« VBScript上でADODB.Connectio... | トップ | VBScriptでdec2bin(64bit)を... »