VBcoders Guest



Don't have an account yet? Register
 


Forgot Password?



For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system in

by Super G (1 Submission)
Category: Miscellaneous
Compatability: VB 6.0
Difficulty: Unknown Difficulty
Originally Published: Tue 21st May 2002
Date Added: Mon 8th February 2021
Rating: (1 Votes)

For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system into DOUBLE VB6 data type

API Declarations


Dim ArrayOK As Boolean



Rate For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system in



Public Function EBCDIC_Ascii(ByVal Num As Integer) As Integer
  PrepareConversionArray
  If Num >= 0 And Num < 256 Then EBCDIC_Ascii = ASCII(Num)
End Function
'convertion ASCII -> EBCDIC 037
Public Function Ascii_EBCDIC(ByVal Num As Integer) As Integer
  PrepareConversionArray
  If Num >= 0 And Num < 256 Then Ascii_EBCDIC = EBCDIC(Num)
End Function

Public Function ConvertingCOMP_3(ByVal s As String) As Double
   ConvertingCOMP_3 = Val(DividiNumero_in_Stringa(DeComp(a), 5, ".")) ' divido il numero per 100.000
End Function

'--------------------------------------------------------------------------------------
'-- utility function ------------------------------------------------------------------
'--------------------------------------------------------------------------------------
Private Function DividiNumero_in_Stringa(ByVal Stringa As String, _
                                        ByVal Posizioni As Integer, _
                                        Optional SeparatoreDecimale As String = ".") As String
 Dim Segno As String
   Stringa = Trim(Stringa)
   ' separo il segno dal numero
   Segno = Left(Stringa, 1)
   If Segno <> "+" And Segno <> "-" Then
       Segno = ""
   Else
       Stringa = Trim(Mid(Stringa, 2)): If Segno = "+" Then Segno = ""
   End If
   ' inserisco il separatore decimale
   If Posizioni >= Len(Stringa) Then
         Stringa = Segno + "0" + SeparatoreDecimale + String(Posizioni - Len(Stringa), "0") + Stringa
   Else
         Stringa = Segno + Left(Stringa, Len(Stringa) - Posizioni) + SeparatoreDecimale + Right(Stringa, Posizioni)
   End If
   DividiNumero_in_Stringa = Stringa
End Function

'Converting Cobol COMP-3 data type to VB data type
Private Function DeComp(ByVal CompData As String) As String
  Dim s As String, a As String
  Dim i As Long, j As Integer
  Dim sSign As String '+ -
  Dim sNumbers As String
  
   On Error Resume Next
   sNumbers = "":  sSign = ""
   
   'CompData is an array of Bytes
   For i = Len(CompData) To 1 Step -1
       'Scan byte by byte
       a = Format$(CStr(Hex(Asc(Mid(CompData, i, 1)))), "@@")
       If Left(a, 1) = " " Then a = "0" + Right(a, 1)
       If Right(a, 1) = " " Then a = Left(a, 1) + "0"
       If i = Len(CompData) Then
          'First byte is the Sign (0x0D = Neg else = Pos)
          If Right(a, 1) = "D" Then sSign = "-" Else sSign = "+"
          sNumbers = Trim(Left(a, 1))
       Else
          'Next bytes are numbers
          sNumbers = Trim(Left(a, 1)) + Trim(Right(a, 1)) + sNumbers
       End If
   Next i
   
   If sNumbers = "" Then sNumbers = "0"
   s = sSign & sNumbers
   
   DeComp = s
End Function

Private Sub PrepareConversionArray()
 Dim B() As String, a As String
 Dim i As Integer
  If ArrayOK Then Exit Sub
  ArrayOK = True
   ' for conversion EBCDIC->ASCII
   a = "0;1;2;3;236;9;202;127;226;210;211;11;12;13;14;169;16;17;18;19;239;197;8;203;24;25;220;216;28;29;30;31;183;184;185;187;196;10;23;27;204;205;207;208;209;5;6;7;217;218;22;221;222;223;224;4;227;229;233;235;176;177;158;26;32;201;131;132;133;160;242;134;135;164;213;46;60;40;43;179;38;130;136;137;138;161;140;139;141;225;33;36;42;41;59;94;45;47;178;142;180;181;182;143;128;165;124;44;37;95;62;63;186;144;188;189;190;243;192;193;194;96;58;35;64;39;61;34;195;97;98;99;100;101;102;103;104;105;174;175;198;199;200;241;248;106;107;108;109;110;111;112;113;114;166;167;145;206;146;15;230;126;115;116;117;118;119;120;121;122;173;168;212;91;214;215;155;156;157;250;159;21;20;172;171;252;170;254;228;93;191;231;123;65;66;67;68;69;70;71;72;73;232;147;148;149;162;237;125;74;75;76;77;78;79;80;81;82;238;150;129;151;163;152;92;240;83;84;85;86;87;88;89;90;253;245;153;247;246;249;48;49;50;51;52;53;54;55;56;57;219;251;154;244;234;255;13;211"
   B = Split(a, ";")
   ReDim ASCII(255): For i = 0 To 255: ASCII(i) = Val(B(i)): Next
   ' for conversion ASCII->EBCDIC
   a = "0;1;2;3;55;45;46;47;22;5;37;11;12;13;14;15;16;17;18;19;60;61;50;38;24;25;63;39;34;29;53;31;64;90;127;123;91;108;80;125;77;93;92;78;107;96;75;97;240;241;242;243;244;245;246;247;248;249;122;94;76;126;110;111;124;193;194;195;196;197;198;199;200;201;209;210;211;212;213;214;215;216;217;226;227;228;229;230;231;232;233;173;224;189;95;109;121;129;130;131;132;133;134;135;136;137;145;146;147;148;149;150;151;152;153;162;163;164;165;166;167;168;169;192;106;208;161;7;104;220;81;66;67;68;71;72;82;83;84;87;86;88;99;103;113;156;158;203;204;205;219;221;223;236;252;176;177;178;62;180;69;85;206;222;73;105;154;155;171;15;186;184;183;170;138;139;60;61;98;79;100;101;102;32;33;34;112;35;114;115;116;190;118;119;120;128;36;21;140;141;142;65;6;23;40;41;157;42;43;44;9;10;172;74;174;175;27;48;49;250;26;51;52;53;54;89;8;56;188;57;160;191;202;58;254;59;4;207;218;20;225;143;70;117;253;235;238;237;144;239;179;251;185;234;187;255;13;37"
   B = Split(a, ";")
   ReDim EBCDIC(255): For i = 0 To 255: EBCDIC(i) = Val(B(i)): Next
End Sub


Download this snippet    Add to My Saved Code

For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system in Comments

No comments have been posted about For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system in. Why not be the first to post a comment about For converting: 1) EBCDIC string into ASCII string and viceversa; 2) COMP-3 data from DB2 system in.

Post your comment

Subject:
Message:
0/1000 characters