汎用機メモっとくか

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

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.ConnectionのSQLに無理言ってDecimal型計算してもらう

2018年01月11日 05時47分25秒 | WSH

VBScript上でADODB.ConnectionのSQLに無理言ってDecimal型計算してもらう

<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 "処理終了"

<schema.ini>必須
[digits19.txt]
ColNameHeader=False
CharacterSet=oem
Format=CSVDelimited
Col1=Field01 Decimal


<use_decimal.vbs>
Set oFS = CreateObject("Scripting.FileSystemObject")
FileName = oFS.GetAbsolutePathName(".") & "\digits19.txt"
If Not oFS.FileExists(FileName) Then
    MsgBox("digits19.txt")
    WScript.Quit()
End If

'Set colArg = WScript.Arguments
'If colArg.Count <>1 Then
'    WScript.StdErr.WriteLine("引数指定エラー")
'    WScript.Quit()
'End If

'keyword = colArg(0)

DBPath = "."
SQLDB = " Driver={Microsoft Text Driver (*.txt; *.csv)};" &_
        " DBQ=" & DBPath & ";"

query = "select Str(Field01),  Int(Field01/2^32),  (Field01 - (Int(Field01/2^32) * 2^32)) from digits19.txt"

  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 

Set oADOConn = Createobject("ADODB.Connection")
oADOConn.Open(SQLDB)

Set oRS = oADOConn.Execute(query)

'WScript.Echo(oRS.GetString(,,vbTab,vbCrLf))

        oADOST_W.WriteText oRS.GetString(,,vbTab,vbCrLf), adWriteLine

oADOConn.Close()

  strPathOut = "out_digits19.txt"
  Dim adSaveCreateNotExist:  adSaveCreateNotExist = 1
  Dim adSaveCreateOverWrite: adSaveCreateOverWrite = 2
  oADOST_W.SaveToFile strPathOut, adSaveCreateOverWrite
  oADOST_W.Close
  Set oADOST_W = Nothing

 

MsgBox "イケるで、しかし!!"

 

 

<確認用>Excel VBA

Sub Check_a001()
   
    Dim a01 As Variant
    Dim a02 As Variant
    Dim a03 As Variant
    Dim i As Integer
    For i = 1 To 10
          a01 = CDec(Range("A" & i).Value)
          a02 = Int(a01 / 2 ^ 32)
          a03 = a01 - a02 * 2 ^ 32
         
          Range("B" & i).Value = CStr(a02)
          Range("C" & i).Value = CStr(a03)
   
    Next
    MsgBox "処理終了"
End Sub


VBScriptで10進数15桁+-のdec2bin(64bit)をできるようにしてみた。(続きAWKで)

2018年01月05日 01時16分54秒 | WSH

blogの文字数制限を超えたので別ページ

ついでにgawk。10進数15桁+-でお願いします。
<d2b.awk>
BEGIN{
  bin16[0]  = "0000"
  bin16[1]  = "0001"
  bin16[2]  = "0010"
  bin16[3]  = "0011"
  bin16[4]  = "0100"
  bin16[5]  = "0101"
  bin16[6]  = "0110"
  bin16[7]  = "0111"
  bin16[8]  = "1000"
  bin16[9]  = "1001"
  bin16[10] = "1010"
  bin16[11] = "1011"
  bin16[12] = "1100"
  bin16[13] = "1101"
  bin16[14] = "1110"
  bin16[15] = "1111"
  z = 0
  for(x=0;x<16;x++){
      for(y=0;y<16;y++){
          bin256[z] =  bin16[x] bin16[y]
          z++
      }
  }
  hex16[0]  = "0"
  hex16[1]  = "1"
  hex16[2]  = "2"
  hex16[3]  = "3"
  hex16[4]  = "4"
  hex16[5]  = "5"
  hex16[6]  = "6"
  hex16[7]  = "7"
  hex16[8]  = "8"
  hex16[9]  = "9"
  hex16[10] = "A"
  hex16[11] = "B"
  hex16[12] = "C"
  hex16[13] = "D"
  hex16[14] = "E"
  hex16[15] = "F"
  z = 0
  for(x=0;x<16;x++){
      for(y=0;y<16;y++){
          hex256[z] =  hex16[x] hex16[y]
          z++
      }
  }

}
#MAIN START
{
   a001 = dec2bin($0)
   print $0 "\t" a001
}
#MAIN EXIT
func dec2bin(number){
  aQuo32Quo16Quo8 = 0
  aQuo32Quo16Mod8 = 0
  aQuo32Mod16Quo8 = 0
  aQuo32Mod16Mod8 = 0
  aMod32Quo16Quo8 = 0
  aMod32Quo16Mod8 = 0
  aMod32Mod16Quo8 = 0
  aMod32Mod16Mod8 = 0
  flg_sign = 0
 
  if(number<0){
     number = number * -1
     flg_sign = 1
  }
 
  aQuo32 = int(number / 2^32)
  aQuo32Quo16 = int(aQuo32 / 2^16)
  aQuo32Quo16Quo8 = int(aQuo32Quo16 /   2^8)
  aQuo32Quo16Mod8 =     aQuo32Quo16 %   2^8
   
  aQuo32Mod16 = aQuo32 - (aQuo32Quo16 * 2^16)
  aQuo32Mod16Quo8 = int(aQuo32Mod16 /   2^8)
  aQuo32Mod16Mod8 =     aQuo32Mod16 %   2^8
   
  aMod32 = number -  (aQuo32 * 2^32)
  aMod32Quo16 = int(aMod32 / 2^16)
  aMod32Quo16Quo8 = int(aMod32Quo16 /   2^8)
  aMod32Quo16Mod8 =     aMod32Quo16 %   2^8
   
  aMod32Mod16 = aMod32 - (aMod32Quo16 * 2^16)
  aMod32Mod16Quo8 = int(aMod32Mod16 /   2^8)
  aMod32Mod16Mod8 =     aMod32Mod16 %   2^8
 
  if(flg_sign == 1){
    j= 0
    for(j=0;j<8;j++){
      minus[j]   = 0
      kuriage[j] = 0
    }
    kuriage[7]  = 1

    minus[0] = 255 - aQuo32Quo16Quo8
    minus[1] = 255 - aQuo32Quo16Mod8
    minus[2] = 255 - aQuo32Mod16Quo8
    minus[3] = 255 - aQuo32Mod16Mod8
    minus[4] = 255 - aMod32Quo16Quo8
    minus[5] = 255 - aMod32Quo16Mod8
    minus[6] = 255 - aMod32Mod16Quo8
    minus[7] = 255 - aMod32Mod16Mod8

     if((minus[7] + kuriage[7]) > 255){
        kuriage[6]  = 1
        minus[7]    = 0
     }else{
        minus[7] = minus[7] + kuriage[7]
     }
     for(j=6;j>0;j--){
       if((minus[j] + kuriage[j]) > 255){
          kuriage[j - 1]  = 1
          minus[j]        = 0
       }else{
          minus[j] = minus[j] + kuriage[j]
       }
     }
     if((minus[0] + kuriage[0]) > 255){
        #こんなのは、範囲外
        #kuriage[0]  = 1
        minus[0]    = 0
     }else{
        minus[0] = minus[0] + kuriage[0]
     }
     join_minus =            bin256[minus[0]] bin256[minus[1]] bin256[minus[2]] bin256[minus[3]]
     join_minus = join_minus bin256[minus[4]] bin256[minus[5]] bin256[minus[6]] bin256[minus[7]]
     join_minus = join_minus "\t"
     join_minus = join_minus hex256[minus[0]] hex256[minus[1]] hex256[minus[2]] hex256[minus[3]]
     join_minus = join_minus hex256[minus[4]] hex256[minus[5]] hex256[minus[6]] hex256[minus[7]]
     return join_minus
  }else{
     join_plus =             bin256[aQuo32Quo16Quo8] bin256[aQuo32Quo16Mod8] bin256[aQuo32Mod16Quo8] bin256[aQuo32Mod16Mod8]
     join_plus =   join_plus bin256[aMod32Quo16Quo8] bin256[aMod32Quo16Mod8] bin256[aMod32Mod16Quo8] bin256[aMod32Mod16Mod8]
     join_plus =   join_plus "\t"
     join_plus =   join_plus hex256[aQuo32Quo16Quo8] hex256[aQuo32Quo16Mod8] hex256[aQuo32Mod16Quo8] hex256[aQuo32Mod16Mod8]
     join_plus =   join_plus hex256[aMod32Quo16Quo8] hex256[aMod32Quo16Mod8] hex256[aMod32Mod16Quo8] hex256[aMod32Mod16Mod8]
     return join_plus
  }
}


VBScriptで10進数15桁+-のdec2bin(64bit)をできるようにしてみた。

2018年01月04日 06時04分58秒 | WSH

参考元 mohmongar様
10進数を2進数で・・・Excelの話。
https://mohmongar.net/?p=773
恐らく、こちらも10進数15桁+-が限界だとおもいます。double型が精度をたもてなくなるので。

 

多桁計算のアルゴリズムとかを使えば、15桁超も可能だろうけど、気が乗りません。

 15桁超えるときは、VBAでDECIMAL型使うか、

VB.NETとかC#.NETとかJScript.NETでDECIMAL型使って、

コンパイルして .exe作ったほうが、簡単だとおもいます。

 


※注意 範囲のエラーチェック無し

<d2b06.vbs>
Option Explicit

Dim oFS
Dim oFR
Dim oFW
Dim myData

Dim i

Dim x , y ,z
Dim bin16(15)
bin16(0)  = "0000"
bin16(1)  = "0001"
bin16(2)  = "0010"
bin16(3)  = "0011"
bin16(4)  = "0100"
bin16(5)  = "0101"
bin16(6)  = "0110"
bin16(7)  = "0111"
bin16(8)  = "1000"
bin16(9)  = "1001"
bin16(10) = "1010"
bin16(11) = "1011"
bin16(12) = "1100"
bin16(13) = "1101"
bin16(14) = "1110"
bin16(15) = "1111"

Dim bin256(255)
z = 0
For x = 0 TO 15
    For y = 0 To 15
        bin256(z) =  bin16(x) & bin16(y)
        z = z + 1
    Next
Next

Dim hex16(15)
hex16(0)  = "0"
hex16(1)  = "1"
hex16(2)  = "2"
hex16(3)  = "3"
hex16(4)  = "4"
hex16(5)  = "5"
hex16(6)  = "6"
hex16(7)  = "7"
hex16(8)  = "8"
hex16(9)  = "9"
hex16(10) = "A"
hex16(11) = "B"
hex16(12) = "C"
hex16(13) = "D"
hex16(14) = "E"
hex16(15) = "F"

Dim hex256(255)
z = 0
For x = 0 TO 15
    For y = 0 To 15
        hex256(z) =  hex16(x) & hex16(y)
        z = z + 1
    Next
Next

Dim aQuo32
Dim aQuo32Quo16
Dim aQuo32Mod16

Dim aMod32
Dim aMod32Quo16
Dim aMod32Mod16

Dim aQuo32Quo16Quo8
Dim aQuo32Quo16Mod8
Dim aQuo32Mod16Quo8
Dim aQuo32Mod16Mod8
Dim aMod32Quo16Quo8
Dim aMod32Quo16Mod8
Dim aMod32Mod16Quo8
Dim aMod32Mod16Mod8

Set oFS = CreateObject("Scripting.FileSystemObject")

Set oFR = oFS.OpenTextFile("C:\Documents and Settings\USER\デスクトップ\b01.txt")
Set oFW = oFS.CreateTextFile("C:\Documents and Settings\USER\デスクトップ\out_b01vbs.txt")

Do Until oFR.AtEndOfStream
    myData = oFR.ReadLine
    oFW.WriteLine( Right("                " & myData,16) & vbTab & dec2bin(myData))
    'oFW.WriteLine(dec2bin(myData))
Loop

oFR.Close
oFW.Close

Set oFR = Nothing
Set oFW = Nothing
Set oFS = Nothing

MsgBox "処理終了"

Function dec2bin(number)
  Dim j
  Dim minus(7)
  Dim kuriage(7)
    aQuo32 = Int(ABS(number) / 2^32)
    aQuo32Quo16 = Int(aQuo32 / 2^16)
    aQuo32Quo16Quo8 = aQuo32Quo16 \   2^8
    aQuo32Quo16Mod8 = aQuo32Quo16 Mod 2^8
   
    aQuo32Mod16 = aQuo32 - (aQuo32Quo16 * 2^16)
    aQuo32Mod16Quo8 = aQuo32Mod16 \   2^8
    aQuo32Mod16Mod8 = aQuo32Mod16 Mod 2^8
   
    aMod32 = ABS(number) -  (aQuo32 * 2^32)
    aMod32Quo16 = Int(aMod32 / 2^16)
    aMod32Quo16Quo8 = aMod32Quo16 \   2^8
    aMod32Quo16Mod8 = aMod32Quo16 Mod 2^8
   
    aMod32Mod16 = aMod32 - (aMod32Quo16 * 2^16)
    aMod32Mod16Quo8 = aMod32Mod16 \   2^8
    aMod32Mod16Mod8 = aMod32Mod16 Mod 2^8

  If number < 0 Then
     For j = 0 To 7
         minus(j) = 0
         kuriage(j)  = 0
     Next
     kuriage(7)  = 1
 
     minus(0) = 255 - aQuo32Quo16Quo8
     minus(1) = 255 - aQuo32Quo16Mod8
     minus(2) = 255 - aQuo32Mod16Quo8
     minus(3) = 255 - aQuo32Mod16Mod8
     minus(4) = 255 - aMod32Quo16Quo8
     minus(5) = 255 - aMod32Quo16Mod8
     minus(6) = 255 - aMod32Mod16Quo8
     minus(7) = 255 - aMod32Mod16Mod8
    
     If minus(7) + kuriage(7) > 255 Then
        kuriage(6)  = 1
        minus(7)    = 0
     Else
        minus(7) = minus(7) + kuriage(7)
     End If
     For j = 6 To 1 Step -1
       If minus(j) + kuriage(j) > 255 Then
          kuriage(j - 1)  = 1
          minus(j) = 0
       Else
          minus(j) = minus(j) + kuriage(j)
       End If
     Next
     If minus(0) + kuriage(0) > 255 Then
        'こんなのは、範囲外
        'kuriage(0)  = 1
        minus(0)    = 0
     Else
        minus(0) = minus(0) + kuriage(0)
     End If

     dec2bin =  bin256(minus(0)) & _
                bin256(minus(1)) & _
                bin256(minus(2)) & _
                bin256(minus(3)) & _
                bin256(minus(4)) & _
                bin256(minus(5)) & _
                bin256(minus(6)) & _
                bin256(minus(7)) & _
                vbTab & _
                hex256(minus(0)) & _
                hex256(minus(1)) & _
                hex256(minus(2)) & _
                hex256(minus(3)) & _
                hex256(minus(4)) & _
                hex256(minus(5)) & _
                hex256(minus(6)) & _
                hex256(minus(7))
  Else
     dec2bin =  bin256(aQuo32Quo16Quo8) & _
                bin256(aQuo32Quo16Mod8) & _
                bin256(aQuo32Mod16Quo8) & _
                bin256(aQuo32Mod16Mod8) & _
                bin256(aMod32Quo16Quo8) & _
                bin256(aMod32Quo16Mod8) & _
                bin256(aMod32Mod16Quo8) & _
                bin256(aMod32Mod16Mod8) & _
                vbTab & _
                hex256(aQuo32Quo16Quo8) & _
                hex256(aQuo32Quo16Mod8) & _
                hex256(aQuo32Mod16Quo8) & _
                hex256(aQuo32Mod16Mod8) & _
                hex256(aMod32Quo16Quo8) & _
                hex256(aMod32Quo16Mod8) & _
                hex256(aMod32Mod16Quo8) & _
                hex256(aMod32Mod16Mod8)
  End If              
End Function


<data_seed.vbs>データの種
Option Explicit

Dim oFS
Dim oText
Dim i
Dim j

Set oFS   =  CreateObject("Scripting.FileSystemObject")
Set oText =  oFS.CreateTextFile("b01.txt")

For i = 1 To 49
    oText.WriteLine( (2^i)-1 )
    oText.WriteLine( (2^i)   )
    oText.WriteLine( (2^i)+1 )
Next

For i = 1 To 49
    oText.WriteLine(Right("-" & (2^i)-1,16) )
    oText.WriteLine(Right("-" & (2^i)  ,16) )
    oText.WriteLine(Right("-" & (2^i)+1,16) )
Next

Dim myData
For i = 7 To 49
    For j = 1 To 100
      myData = INT(RND() * (2^i))
      oText.WriteLine(      myData )
      oText.WriteLine("-" & myData )
    Next
Next

    oText.WriteLine( 987654321012345)
    oText.WriteLine(-987654321012345)

    oText.WriteLine( 999999999999999)
    oText.WriteLine(-999999999999999)

oText.Close

Set oText = Nothing
Set oFS   = Nothing

MsgBox "処理終了"

 

検証用r4(rexx)サンプル
regina(rexx),ooREXX(rexx)の場合、"!"を"STDERR"に変えてください。

<b2d64.rex>2進数から10進数へ
Numeric Digits 20

myTab = '09'x
do i = 1 while lines() > 0
    num01 = linein()    /* STDIN */
   
    a02 = b2x(num01)
    a03 = x2d(b2x(num01),16) 
    Call lineout ,a03||myTab||num01 /* STDOUT */
end

Call lineout !,Right("00000"||i,5)||" counts" /* STDERR */


<dec2bin64.rex>10進数から2進数へ

Numeric Digits 20

myTab = '09'x
do i = 1 while lines() > 0
    num01 = linein()    /* STDIN */
   
    a01 = Right("                    "||num01,20)
    a02 = d2x(num01,16)
    a03 = x2b(d2x(num01,16))  /* DEC2BINに相当するもの無し*/
    Call lineout ,a01||myTab||a02||myTab||a03 /* STDOUT */
end

Call lineout !,Right("00000"||i,5)||" counts" /* STDERR */


※注意
<d2b64.rex>
Numeric Digits 20

myTab = '09'x
    num01 = "-618399247191519"    /* STDIN */
   
    /*a01 = Right("                    "||num01,20)*/
    SAY d2x(num01,16)
    SAY x2b(d2x(num01,16))  /* DEC2BINに相当するもの無し*/

R:\>r4 d2b64.rex
FFFFFFFF80000000
1111111111111111111111111111111110000000000000000000000000000000

R:\>regina d2b64.rex
FFFDCD91B48AB221
1111111111111101110011011001000110110100100010101011001000100001

R:\>

C:\Documents and Settings\USER\デスクトップ>rexx -v
Open Object Rexx Version 4.1.0
Build date: Dec  5 2010
Addressing Mode: 32

Copyright (c) IBM Corporation 1995, 2004.
Copyright (c) RexxLA 2005-2010.
All Rights Reserved.
This program and the accompanying materials are made available under
the terms of the Common Public License v1.0 which accompanies this
distribution or at
http://www.oorexx.org/license.html

C:\Documents and Settings\USER\デスクトップ>rexx d2b64.rex
FFFDCD91B48AB221
1111111111111101110011011001000110110100100010101011001000100001

C:\Documents and Settings\USER\デスクトップ>


<a01.rex>
Numeric Digits 20

myTab = '09'x
a01 ="1111111111111100011100101000000101011011001110011000000000000001"
SAY b2x(a01)
SAY x2D(b2x(a01),16)

a01 ="1111111111111100011111011011101111001111000010010000000110000111"
SAY b2x(a01)
SAY x2D(b2x(a01),16)

 

R:\>r4 a01.rex
FFFC72815B398001
-999999999999999
FFFC7DBBCF090187
-987654321012345

R:\>regina a01.rex
FFFC72815B398001
-999999999999999
FFFC7DBBCF090187
-987654321012345

R:\>

下記ooREXX

C:\Documents and Settings\USER\デスクトップ>rexx a01.rex
FFFC72815B398001
-999999999999999
FFFC7DBBCF090187
-987654321012345

C:\Documents and Settings\USER\デスクトップ>