?? ???? ??? EBCDIC ??????? ????????, ?????? ???????? ?? EBCDIC ?? vice versa ASCII ?? ?????? ???? ?? ??? ??? ?? ??? ASCII ?? ??? ????? ??? ???
Mainframe ???????? ?? ???? ?? ?? ??? ????? EBCDIC ???? ?????? ??? ??????? ???? ?? ???? ??? ?? VBA, ????? ?? ????? ??? ASCII ???? ?? ?? ?????? ?? ????? ?? ????? ?? ??? ??? ??????? ????????? ?? ????? ???? ???? ?????? ???? ???
?? ???? ?????? ?????? ????? ?? ??? ?? ???? ????????? ????? ?? ??? ????? ?????? ?? ??? ?????? ???? ?? ??? ??? ?????? ?? ?????? ????? ???
???? ????? ?? ???? ??? ???
- VBA ???????, ?? superset ASCII ?? ?? ?? ?? ?????? ???? ??? ???? ASCII ?????? (Chr(0) Chr(255)) ???? ?? ??? ???????? ????? ???? ?? ???? ??? ??????? ?????
- ?????? ???????? ?? ??? ?? ISO/ANSI ASCII ???? ??? ???? ?? ??? ???? ????????? EBCDIC ??? ????? (CECP 037) ???? ??? ?? ??? ?? ?? ???????? ?? ?????? ???? ?? ???: ????? ?? ??? ????? ???? ?? ???? ???
- Windows ?????? ISO/ANSI ASCII ???? ??? ?? ????? ???? ???? ??, ????? ?? ???? ?? IBM PC OEM ASCII ???? ??? ?? ??? ??? ?? ?????? ????? ?? 128 ???? ????
- ????? EBCDIC ?? ASCII ???? ???, ?? ?? variations ??? ??????? ????????????? ????? ???? ?? ??? ????? ??? ?? ????? ???????? ?????? ?????? ?? ?????? ?? ??? ???? ???
- ???? ??? HP, (?? ??? ??? IBM 3780 ???????? ??? ?????????) IBM ?? AT&T ?? ??? ASCII ?? EBCDIC ?????? ??? notable ???? ???:
?? ?????? ?? ??????? ?????? ?????? ?? ??????? ????
| ASCII | HP EBCDIC | IBM EBCDIC | AT&T EBCDIC |
|---|
| ! | 21 | 4F | 5A | 5A |
| [ | 5B | 4A | 5B | ?? |
| ] | 5 D | 5A | 5 D | BD |
| ^ | 5E | 5F | 5E | 5F |
????? ???? ?? ?? 5A ?? ???????????? ???? ?? "!" IBM ?? AT&T, ????? "]" HP ???? ?? ???? ???? ???? ???? ???????? ????? ???-?????? ?????? ?? ?????? ??? ?? ???
?????? ???:
?? ?????? ?? ??????? ?????? ?????? ?? ??????? ????
| ?????? ?? ??? ???? ???. | ?????: |
|---|
| ?????? ???? | ????? ?? ???? ????????? ????? ?? ??? ???????? ?????? ???? ???
?? ???? ?? ??? ??? ?????? ?????? ?? ??? ?????? ??? |
| ASCII_To_EBCDIC_Table | ??? EBCDIC ???????? ?? ??? ??? ASCII ???????? ??? ?????? ???? ?? ??? ?????? ?????? ???? ??? ???????? ???? ??? |
| EBCDIC_To_ASCII_Table | ??? ASCII ???????? ?? ??? ??? EBCDIC ???????? ??? ?????? ???? ?? ??? ?????? ?????? ???? ??? ???????? ???? ??? |
| HexToStr | ???? ????? ?????? ?? ???????????? ??? ?? ??? ???????? ?? ??????? ??? ?? ???????? ?????? ??? ?????? ???? ??? |
?????? ????? ??????????? ??? ??? ??? ??? VBA ??????? ??????? ?? ???? ???:
Function Translate(ByVal InText As String, xlatTable As String) As String
'
' Uses a translation table to map InText from one character set to another.
'
Dim Temp As String, I As Long Temp = Space$(Len(InText))
For I = 1 To Len(InText)
Mid$(Temp, I, 1) = Mid$(xlatTable, Asc(Mid$(InText, I, 1)) + 1, 1) Next I
Translate = Temp
End Function
Function ASCII_To_EBCDIC_Table() As String
'
' Returns the following table as a string for use by the Translate
' function to translate an EBCDIC string to an ASCII-ISO/ANSI string.
'
' 00 01 02 03 37 2D 2E 2F 16 05 25 0B 0C 0D 0E 0F
' 10 11 12 13 3C 3D 32 26 18 19 3F 27 1C 1D 1E 1F
' 40 5A 7F 7B 5B 6C 50 7D 4D 5D 5C 4E 6B 60 4B 61
' F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 7A 5E 4C 7E 6E 6F
' 7C C1 C2 C3 C4 C5 C6 C7 C8 C9 D1 D2 D3 D4 D5 D6
' D7 D8 D9 E2 E3 E4 E5 E6 E7 E8 E9 AD E0 BD 5F 6D
' 79 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96
' 97 98 99 A2 A3 A4 A5 A6 A7 A8 A9 C0 4F D0 A1 07
' 20 21 22 23 24 15 06 17 28 29 2A 2B 2C 09 0A 1B
' 30 31 1A 33 34 35 36 08 38 39 3A 3B 04 14 3E E1
' 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57
' 58 59 62 63 64 65 66 67 68 69 70 71 72 73 74 75
' 76 77 78 80 8A 8B 8C 8D 8E 8F 90 9A 9B 9C 9D 9E
' 9F A0 AA AB AC 4A AE AF B0 B1 B2 B3 B4 B5 B6 B7
' B8 B9 BA BB BC 6A BE BF CA CB CC CD CE CF DA dB
' DC DD DE DF EA EB EC ED EE EF FA FB FC FD FE FF
'
ASCII_To_EBCDIC_Table = _
HexToStr("00010203372D2E2F1605250B0C0D0E0F101112133C3D322618193F271C1D1E1F") & _
HexToStr("405A7F7B5B6C507D4D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F") & _
HexToStr("7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D") & _
HexToStr("79818283848586878889919293949596979899A2A3A4A5A6A7A8A9C04FD0A107") & _
HexToStr("202122232415061728292A2B2C090A1B30311A333435360838393A3B04143EE1") & _
HexToStr("4142434445464748495152535455565758596263646566676869707172737475") & _
HexToStr("767778808A8B8C8D8E8F909A9B9C9D9E9FA0AAABAC4AAEAFB0B1B2B3B4B5B6B7") & _
HexToStr("B8B9BABBBC6ABEBFCACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF")
End Function
Function EBCDIC_To_ASCII_Table() As String
'
' Returns the following table as a string for use by the Translate
' function to traslate an EBCDIC string to an ASCII-ISO/ANSI string.
'
' 00 01 02 03 9C 09 86 7F 97 8D 8E 0B 0C 0D 0E 0F ....?.?-?.....
' 10 11 12 13 9D 85 08 87 18 19 92 8F 1C 1D 1E 1F ........?..'....
' 80 81 82 83 84 0A 17 1B 88 89 8A 8B 8C 05 06 07 ???"...?????...
' 90 91 16 93 94 95 96 04 98 99 9A 9B 14 15 9E 1A '.""?-.?(tm)??..?.
' 20 A0 A1 A2 A3 A4 A5 A6 A7 A8 D5 2E 3C 28 2B 7C . ¡¢£¤¥¦§...<(+|
' 26 A9 AA AB AC AD AE AF B0 B1 21 24 2A 29 3B 5E &(c)ª"¬(r)¯°±!$*);^
' 2D 2F B2 B3 B4 B5 B6 B7 B8 B9 E5 2C 25 5F 3E 3F -/²³´µ¶·¸¹.,%_>?
' BA BB BC BD BE BF C0 C1 C2 60 3A 23 40 27 3D 22 º"1/41/23/4¿...`:#@'="
' C3 61 62 63 64 65 66 67 68 69 C4 C5 C6 C7 C8 C9 .abcdefghi......
' CA 6A 6B 6C 6D 6E 6F 70 71 72 CB CC CD CE CF D0 .jklmnopqr......
' D1 7E 73 74 75 76 77 78 79 7A D2 D3 D4 5B D6 D7 .~stuvwxyz...[..
' D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 5D E6 E7 .............]..
' 7B 41 42 43 44 45 46 47 48 49 E8 E9 EA EB EC ED {ABCDEFGHI......
' 7D 4A 4B 4C 4D 4E 4F 50 51 52 EE EF F0 F1 F2 F3 }JKLMNOPQR......
' 5C 9F 53 54 55 56 57 58 59 5A F4 F5 F6 F7 F8 F9 \.STUVWXYZ......
' 30 31 32 33 34 35 36 37 38 39 FA FB FC FD FE FF 0123456789......
'
EBCDIC_To_ASCII_Table = _
HexToStr("000102039C09867F978D8E0B0C0D0E0F101112139D8508871819928F1C1D1E1F") & _
HexToStr("80818283840A171B88898A8B8C050607909116939495960498999A9B14159E1A") & _
HexToStr("20A0A1A2A3A4A5A6A7A8D52E3C282B7C26A9AAABACADAEAFB0B121242A293B5E") & _
HexToStr("2D2FB2B3B4B5B6B7B8B9E52C255F3E3FBABBBCBDBEBFC0C1C2603A2340273D22") & _
HexToStr("C3616263646566676869C4C5C6C7C8C9CA6A6B6C6D6E6F707172CBCCCDCECFD0") & _
HexToStr("D17E737475767778797AD2D3D45BD6D7D8D9DADBDCDDDEDFE0E1E2E3E45DE6E7") & _
HexToStr("7B414243444546474849E8E9EAEBECED7D4A4B4C4D4E4F505152EEEFF0F1F2F3") & _
HexToStr("5C9F535455565758595AF4F5F6F7F8F930313233343536373839FAFBFCFDFEFF")
End Function
Function HexToStr(ByVal HexStr As String) As String
Dim Temp As String, I As Long
Temp = Space$(Len(HexStr) \ 2)
For I = 1 To Len(HexStr) \ 2
Mid$(Temp, I, 1) = Chr$(Val("&H" & Mid$(HexStr, I * 2 - 1, 2)))
Next I
HexToStr = Temp
End Function
?????:
sEBCDIC = Input(#1, 50) ' input 50 characters
sASCII = Translate(sEBCDIC, ASCII_To_EBCDIC_Table())
??, ???-??? ?????? ????? ??? ????, ??? ?? ?????? ?????? ??? ?? ???????? ?? ??? ?? ???? ???:
xlat = ASCII_To_EBCDIC_Table()
sASCII = Translate(sEBCDIC, xlat)