|
|
|
|
Перекодировка в DELPHI
»»»
vladar (07.07.00 17:42) Как, если это возможно, запихнуть в TMemo
текстовый крилический DOS файл? То биш встает вопрос перекодировки
DOS->Win1251.
»»» Merlin (07.07.00 18:02) Самое просто с TMemo,
это сменить ему шрифт, который настроен на DOS кодировку terminal например
(тогда все будет показываться как надо, НО если скопировать из него текст в
буфер обиена, то :((( Если перекодировать, то смотри FAQ, там это точно
есть, функция вроде бы называется AnsiToOEM...
»»» vladar -
vladar@chat.ru (07.07.00 18:43) Ежели сменить ему шрифт, то возникает
опять проблема - а редактировать то его как? Дело в том, что у шрифта
Terminal раскладка клавы вообще дурная. А в FAQ-е вроде ничего такого нету
:(((
»»» vladar - vladar@chat.ru (07.07.00 18:47) Звиняйте. Нашел.
Усе получилось. Thnx :)
-= Из конференции сайта MASTERS OF DELPHI
(http://delphi.mastak.com) =- Комментарий от: Владимир Челабчи
(S&PE Telematika) Один из вариантов
кодировщика слегка громозкий но работает быстро, изменяя таблицу можно
отключить пропуск непечатаемых символов
const ConvertSet : array[0..255] of byte = {таблица перекодировки ASCII с альтернативной кодовой страницой 866 в WIN 1251. Украинские символы - по кодовой таблице PRINTFXU. Непечатные символы заменяются пробелами} {основная таблица} { 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F {00} ( 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, {10} 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, {20} 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, {30} 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, {40} 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, {50} 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, {60} 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, {70} 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, {дополнительная таблица} {80} 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, {90} 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, {A0} 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, {B0} 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, {C0} 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, {B0} 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, {E0} 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, {F0} 168,184,178,179, 32, 32,175,191,170,186, 32,177,185, 32, 32, 32); var TextString : string[250]; TextTmpArr : array[0..250] of byte absolute TextString; WinString : string[250]; WinTmpArr : array[0..250] of byte absolute WinString; DosFile : Text; TextFName : string; TextFDir : string; WinFName : string; procedure TMainFm.ConvertFile; var I : Integer; begin AssignFile(DosFile,TextFName); ReSet(DosFile); While Not(EOF(DosFile)) do begin ReadLn(DosFile,TextString); WinTmpArr[0] := TextTmpArr[0]; for I := 1 to TextTmpArr[0] do begin WinTmpArr[I] := ConvertSet[TextTmpArr[I]]; end; Memo.Lines.Add(WinString); end; end;
Данный
код писался на еще Borland Pascal 5.0 и учитывал то, что тип string
представляет собой массив char с нулевым элементом имеющим значение
динамической длины строки, в Delphi разработчики могут изменить способ
хранения строки в памяти так что надо быть внимательным с данным алгоритмом
возможны глюки
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|