На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Object Pascal / Перекодировка в DELPHI Сделать домашней страницей Добавить в избранное Написать писмо

Перекодировка в 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
Hosted by uCoz