tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル COMP-3の変換につて
投稿日: 2017/09/20(Wed) 17:40
投稿者Naruse
はじめまして。Naruseと申します。

早速ですが、データのほとんどがパック形式のシーケンシャルファイルから
SQL-Serverに一括登録するプログラムを作っています。
内部十進を外部十進に変換するにあたり、いろいろな情報からデータの変換が
可能になりましたが、0x80以降のデータで正しく変換できたりできなかったり
しています。
下記の変換方法以外も試しましたが解決に至らず、投稿させていただくことに
しました。

開発はVB6.0、OSはWindowsServer2008です。
VB素人のプログラムですが、下記に抜粋します。
変換結果も書いておきます。
どうかよろしくお願いします。

Private Sub DataSet1()
    MOTO = GT.W_200
    'StrToBin (MOTO)
    MOTO = StrConv(GT.W_200, vbFromUnicode) ' システムコードに変換
    COMP3_CNV_RTN MOTO, 5
    W21_200 = Val(W_SIGN & Result)
End Sub

Private Sub COMP3_CNV_RTN(C3 As String, CNT As Integer)
    Dim W_ASC As String
    Dim W_HEX As String
    Result = ""
    W_SIGN = ""
    For X = 1 To CNT
        W_VAL = MidB(C3, X, 1)
        W_ASC = CStr(AscB(W_VAL))
        W_HEX = (Hex(AscB(W_VAL)))
        If Len(CStr(Hex(AscB(W_VAL)))) = 1 Then
            Result = Result & "0" & CStr(Hex(AscB(W_VAL)))
        Else
        Select Case CStr(Hex(AscB(W_VAL)))
            Case "0c", "0C", "0d", "0D", "c", "C", "d", "D"
                Result = Result & "0"
                Exit For
            Case "1c", "1C", "1d", "1D"
                Result = Result & "1"
                Exit For
            Case "2c", "2C", "2d", "2D"
                Result = Result & "2"
                Exit For
            Case "3c", "3C", "3d", "3D"
                Result = Result & "3"
                Exit For
            Case "4c", "4C", "4d", "4D"
                Result = Result & "4"
                Exit For
            Case "5c", "5C", "5d", "5D"
                Result = Result & "5"
                Exit For
            Case "6c", "6C", "6d", "6D"
                Result = Result & "6"
                Exit For
            Case "7c", "7C", "7d", "7D"
                Result = Result & "7"
                Exit For
            Case "8c", "8C", "8d", "8D"
                Result = Result & "8"
                Exit For
            Case "9c", "9C", "9d", "9D"
                Result = Result & "9"
                Exit For
            Case Else
                Result = Result & CStr(Hex(AscB(W_VAL)))
        End Select
        End If
    Next X
    'Select Case CStr(Hex(AscB(W_VAL)))
    Select Case W_HEX
        Case "c", "C", "0c", "1c", "2c", "3c", "4c", "5c", "6c", "7c", "8c", "9c", "0C", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C"
            W_SIGN = "+"
        Case Else
            W_SIGN = "-"
    End Select
End Sub

正常値例
0x00 04 89 94 4c --> +000489944
0x00 00 09 83 4c --> +000009834
異常値例
0x00 00 15 04 8c --> -0000150481
0x00 00 07 98 2c --> -0000078145
0x00 00 11 43 9c --> -0000114381

ここから分かることは
0x83、0x89、0x94は正しく変換
0x98、0x8c、0x9cは81に変換
間違った変換の後の値も異常値になる(0x2cが45)

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。