FUNCTION toBYTEA( cStr ) >> >>LOCAL i, j, cRes, nChr, cDig >> >>cRes = '' >>FOR i=1 TO LEN(m.cStr) >> nChr = ASC( SUBSTR( m.cStr, m.i,1)) >> * The following four lines cna be removed if this can speed the conversion. >> IF BETWEEN( nChr, 32,126 ) AND !INLIST( nChr,39,92) >> cRes = m.cRes + SUBSTR( m.cStr, m.i,1) >> LOOP >> ENDIF >> >> cDig = '' >> FOR j=1 TO 3 >> cDig= CHR(ASC('0')+ m.nChr%8) + m.cDig >> nChr = INT(m.nChr/8) >> ENDFOR >> cRes = m.cRes + '\\'+ m.cDig >> ENDFOR >>RETURN m.cRes >>ENDFUNC>
* Worse one - call toByteA repeatedly >Local lcFile >lcFile = Getfile() >Strtofile(ConvertToOctet2(m.lcFile), Forceext(m.lcFile,'oc1')) > >Function ConvertToOctet2 >Lparameters tcFile > Local handleIn, handleOut, lcTemp > lcTemp = Sys(2015)+'.tmp' > handleIn = Fopen(m.tcFile) > handleOut = Fcreate(m.lcTemp) > Do While !Feof(handleIn) > =Fwrite(handleOut, toByteA(Fread(handleIn,1))) > Enddo > Fclose(handleIn) > Fclose(handleOut) > lcResult = Filetostr(m.lcTemp) > Erase (m.lcTemp) > Return m.lcResult >endfunc >>
* Prepare an array for all 256 chars >Local lcFile >lcFile = Getfile() > >Local Array aOctet[256] >For ix=0 To 255 > aOctet[m.ix+1] = toByteA(Chr(m.ix)) >Endfor > >Strtofile(ConvertToOctet(m.lcFile, @aOctet), Forceext(m.lcFile,'oct')) > >Function ConvertToOctet > Lparameters tcFile, taConversion > Local handleIn, handleOut, lcTemp > lcTemp = Sys(2015)+'.tmp' > handleIn = Fopen(m.tcFile) > handleOut = Fcreate(m.lcTemp) > Do While !Feof(handleIn) > =Fwrite(handleOut, taConversion[Asc(Fread(handleIn,1))+1]) > Enddo > Fclose(handleIn) > Fclose(handleOut) > lcResult = Filetostr(m.lcTemp) > Erase (m.lcTemp) > Return m.lcResult >Endfunc >Cetin
*-------------------------------------------------------------------------- function ToByteA_fd(s) local fd_in, fd_out, FileIn, FileOut FileIn = GetTmpFileName('txt') FileOut = GetTmpFileName('txt') =strtoFile(m.s, FileIn) fd_in = fopen(FileIn, 0) fd_out = fcreate(m.FileOut, 0) =fclose(m.fd_out) fd_out = fopen(m.FileOut, 1) local i, ToDo[256], n for i = 0x00 to 0xff do case case between(m.i, 32,126 ) and !inlist(m.i, 39, 92) ToDo[ m.i + 1] = chr(m.i) otherwise ToDo[ m.i + 1] = '\\' ; + chr(asc('0') + bitrshift(m.i, 6) ) ; + chr(asc('0') + mod(bitrshift(m.i, 3),8) ) ; + chr(asc('0') + mod(m.i,8)) endcase endfor n = fseek(m.fd_in, 0, 2) =fseek(m.fd_in, 0, 0) for i = 1 to m.n =fwrite(m.fd_out, ToDo[asc(fread(m.fd_in,1))+1]) endfor =fclose(m.fd_in) =fclose(m.fd_out) s = FileTostr(m.FileOut) erase (m.FileIn) erase (m.FileOut) return m.s endfunc *--------------------------------------------------------------------------