Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как прочитать русский текст MS-DOS 3

Delphi , ОС и Железо , DOS и Консоль

Как прочитать русский текст MS-DOS 3

- У меня проблема с ДОСОМ!
- Что, компьютер не запускается?
- Нет. Дасморк.

Один из вариантов кодировщика слегка громоздкий, но работает быстро, изменяя таблицу можно отключить пропуск непечатаемых символов


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
      WinTmpArr[I] := ConvertSet[TextTmpArr[I]];
    Memo.Lines.Add(WinString);
  end;
end;

Проблема, которую вы пытаетесь решить, - чтение русского текста из файла MS-DOS, использующего кодовую страницу 866, и конвертация его в Windows-1251 (CP-1251) для отображения в вашем приложении.

Вот разбивка кода:

  1. Массив ConvertSet maps ASCII-символы к их соответствующим кодам CP-866 и CP-1251.
  2. Процедура TMainFm.ConvertFile читает файл построчно, конвертирует каждую строку из CP-866 в CP-1251 с помощью массива ConvertSet, и добавляет ее в контрол Memo.

Чтобы улучшить этот код:

  • Вместо чтения всего файла в память одновременно, рассмотрите использование подхода на основе потока для чтения файла по частям.
  • Массивы WinTmpArr и TextTmpArr не необходимы. Вы можете напрямую изменять переменные TextString или WinString.
  • Процедура ConvertFile может быть сделана более эффективной с помощью цикла, обрабатывающего несколько символов одновременно, вместо отдельного перебора каждого символа.

Вот альтернативное решение:

procedure TMainFm.ConvertFile;
var
  I: Integer;
  Buf: array[0..255] of byte;
begin
  AssignFile(DosFile, TextFName);
  ReSet(DosFile);
  while not(EOF(DosFile)) do
  begin
    BlockRead(DosFile, Buf, 256);
    for I := 1 to Length(Buf) do
      Buf[I] := ConvertSet[Buf[I]];
    WinString := '';
    for I := 1 to Length(Buf) do
      WinString := WinString + Chr(Buf[I]);
    Memo.Lines.Add(WinString);
  end;
end;

В этом альтернативном решении мы используем функцию BlockRead для чтения блока данных из файла, и затем обрабатываем каждый символ в этом блоке с помощью массива ConvertSet. Мы строим конвертированный строку путем склеивания символов вместе.

О статье "Как прочитать русский текст MS-DOS 3" в одном предложении: Статья рассказывает о способах чтения русского текста на компьютере с операционной системой MS-DOS 3, описывая кодировщик и программу для конвертации текста.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DOS и Консоль ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 17:33:28/0.006026029586792/1