Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

Ascii to EBCDIC

Have report from foxpro table in ascii format that I need to convert to
EBCDIC. Not sure if there is any activeX controls or function that I can
run to do this. If there is please point me in the right direction.
[220 byte] By [Jarrett] at [2007-11-10 12:48:48]
# 1 Re: Ascii to EBCDIC
Jarrett,
If the report is straight ASCII text (no embedded control characters other than maybe CF, LF, FF),
then you could use this routine (and it's inverse).

Rick

*** -------------------- ***
***
*** These routines convert ASCII (ANSI) and EBCDIC strings.
***
*** asc2ebc(str) : ASCII String to EBCDIC String
***
*** ebc2asc(str) : EBCDIC String to ASCII String
***
*** EXAMPLES:
***
*** ? ebc2asc(asc2ebc('0123456789'))
*** ? ebc2asc(asc2ebc('abcdefghijklmnopqrstuvwxyz'))
*** ? ebc2asc(asc2ebc(UPPER('abcdefghijklmnopqrstuvwxyz')))
*** ? ebc2asc(asc2ebc('!@#$%^&*()_+{}:"<>?|~-=[];,./`'+"'"))
***
*** -------------------- ***
FUNCTION asc2ebc && Convert ASCII to EBCDIC
PARAMETER zcasc
PRIVATE lcebc, lnii, lntmp

*** Note: There is no EBCDIC '!' or '^' ***
IF TYPE('gcchrebc') <> "C"
RELEASE gcchrebc && jic
PUBLIC gcchrebc
gcchrebc = ""
* - NUL -> SI
gcchrebc = gcchrebc+chr(000)+chr(001)+chr(002)+chr(003);
+chr(055)+chr(045)+chr(046)+chr(047)
gcchrebc = gcchrebc+chr(022)+chr(005)+chr(021)+chr(011);
+chr(012)+chr(013)+chr(014)+chr(015)
* - DLE -> US
gcchrebc = gcchrebc+chr(016)+chr(017)+chr(018)+chr(019);
+chr(060)+chr(061)+chr(050)+chr(038)
gcchrebc = gcchrebc+chr(024)+chr(025)+chr(063)+chr(033);
+chr(028)+chr(029)+chr(030)+chr(031)
* - <space> -> /
gcchrebc = gcchrebc+chr(064)+chr(255)+chr(127)+chr(123);
+chr(091)+chr(108)+chr(080)+chr(125)
gcchrebc = gcchrebc+chr(077)+chr(093)+chr(092)+chr(078);
+chr(107)+chr(096)+chr(075)+chr(097)
* - 0 -> ?
gcchrebc = gcchrebc+chr(240)+chr(241)+chr(242)+chr(243);
+chr(244)+chr(245)+chr(246)+chr(247)
gcchrebc = gcchrebc+chr(248)+chr(249)+chr(122)+chr(094);
+chr(076)+chr(126)+chr(110)+chr(111)
* - @ -> O
gcchrebc = gcchrebc+chr(124)+chr(193)+chr(194)+chr(195);
+chr(196)+chr(197)+chr(198)+chr(199)
gcchrebc = gcchrebc+chr(200)+chr(201)+chr(209)+chr(210);
+chr(211)+chr(212)+chr(213)+chr(214)
* - P -> _
gcchrebc = gcchrebc+chr(215)+chr(216)+chr(217)+chr(226);
+chr(227)+chr(228)+chr(229)+chr(230)
gcchrebc = gcchrebc+chr(231)+chr(232)+chr(233)+chr(074);
+chr(224)+chr(090)+chr(255)+chr(109)
* - ` -> o
gcchrebc = gcchrebc+chr(121)+chr(129)+chr(130)+chr(131);
+chr(132)+chr(133)+chr(134)+chr(135)
gcchrebc = gcchrebc+chr(136)+chr(137)+chr(145)+chr(146);
+chr(147)+chr(148)+chr(149)+chr(150)
* - p -> DEL
gcchrebc = gcchrebc+chr(151)+chr(152)+chr(153)+chr(162);
+chr(163)+chr(164)+chr(165)+chr(166)
gcchrebc = gcchrebc+chr(167)+chr(168)+chr(169)+chr(192);
+chr(079)+chr(208)+chr(161)+chr(007)
ENDIF
lcebc = ""
FOR lnii = 1 to LEN(zcasc)
lntmp = ASC(SUBSTR(zcasc, lnii, 1))+1 && (+1 from zero to one based)
IF lntmp < 128 && OK to Translate
lcebc = lcebc + SUBSTR(gcchrebc, lntmp, 1)
ELSE && No direct equivalance
lcebc = lcebc + chr(255)
ENDIF
ENDFOR

RETURN lcebc

*** -------------------- ***

FUNCTION ebc2asc && Convert EBCDIC to ASCII
PARAMETER zcebc
PRIVATE lcasc, lnii

IF TYPE('gcchrasc') <> "C"
RELEASE gcchrasc && jic
PUBLIC gcchrasc

gcchrasc = ""
* - NUL -> SI
gcchrasc = gcchrasc+chr(000)+chr(001)+chr(002)+chr(003);
+chr(255)+chr(009)+chr(255)+chr(127)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(011);
+chr(012)+chr(013)+chr(014)+chr(015)
* - DLE -> US
gcchrasc = gcchrasc+chr(016)+chr(017)+chr(018)+chr(019);
+chr(255)+chr(255)+chr(008)+chr(255)
gcchrasc = gcchrasc+chr(024)+chr(025)+chr(255)+chr(255);
+chr(028)+chr(029)+chr(030)+chr(031)
* - LF -> BEL
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(010)+chr(023)+chr(027)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(005)+chr(006)+chr(007)
* - SYN -> SUB
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(022)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(004)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(020)+chr(021)+chr(255)+chr(026)
* - <space> -> Vert Bar
gcchrasc = gcchrasc+chr(032)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(091)+chr(046);
+chr(060)+chr(040)+chr(043)+chr(124)
* - & -> Not
gcchrasc = gcchrasc+chr(038)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(093)+chr(036);
+chr(042)+chr(041)+chr(059)+chr(255)
* - - -> ?
gcchrasc = gcchrasc+chr(045)+chr(047)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(044);
+chr(037)+chr(095)+chr(062)+chr(063)
* - ` -> "
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
gcchrasc = gcchrasc+chr(255)+chr(096)+chr(058)+chr(035);
+chr(064)+chr(039)+chr(061)+chr(034)
* - a -> i
gcchrasc = gcchrasc+chr(255)+chr(097)+chr(098)+chr(099);
+chr(100)+chr(101)+chr(102)+chr(103)
gcchrasc = gcchrasc+chr(104)+chr(105)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - j -> r
gcchrasc = gcchrasc+chr(255)+chr(106)+chr(107)+chr(108);
+chr(109)+chr(110)+chr(111)+chr(112)
gcchrasc = gcchrasc+chr(113)+chr(114)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - ~ -> z
gcchrasc = gcchrasc+chr(255)+chr(126)+chr(115)+chr(116);
+chr(117)+chr(118)+chr(119)+chr(120)
gcchrasc = gcchrasc+chr(121)+chr(122)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - .. ..
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
gcchrasc = gcchrasc+chr(255)+chr(255)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - { -> I
gcchrasc = gcchrasc+chr(123)+chr(065)+chr(066)+chr(067);
+chr(068)+chr(069)+chr(070)+chr(071)
gcchrasc = gcchrasc+chr(072)+chr(073)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - } -> R
gcchrasc = gcchrasc+chr(125)+chr(074)+chr(075)+chr(076);
+chr(077)+chr(078)+chr(079)+chr(080)
gcchrasc = gcchrasc+chr(081)+chr(082)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - \ -> Z
gcchrasc = gcchrasc+chr(092)+chr(255)+chr(083)+chr(084);
+chr(085)+chr(086)+chr(087)+chr(088)
gcchrasc = gcchrasc+chr(089)+chr(090)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
* - 0 -> 9
gcchrasc = gcchrasc+chr(048)+chr(049)+chr(050)+chr(051);
+chr(052)+chr(053)+chr(054)+chr(055)
gcchrasc = gcchrasc+chr(056)+chr(057)+chr(255)+chr(255);
+chr(255)+chr(255)+chr(255)+chr(255)
ENDIF

lcasc = ""
FOR lnii = 1 to LEN(zcebc)
* && (+1 from zero based to one based)
lcasc = lcasc + SUBSTR(gcchrasc, ASC(SUBSTR(zcebc, lnii, 1))+1, 1)
ENDFOR

RETURN lcasc

*** -------------------- ***

"Jarrett" <Jcrudisill@yahoo.com> wrote in message news:3e636532$1@tnews.web.dev-archive.com...
>
> Have report from foxpro table in ascii format that I need to convert to
> EBCDIC. Not sure if there is any activeX controls or function that I can
> run to do this. If there is please point me in the right direction.
Rick Bean at 2007-11-11 23:51:28 >