При использовании DOS DBF файлов - перекодировка между форматами
Чайник y хакеpа спpашивает, что такое UNIX, Windows'95, OS/2 и DOS?
- Hy пpедставь себе аэpопоpт. Hа взлетной полосе стоит навоpоченный кpасивый самолет. Пассажиpы в него заходят - там ковpы везде, все класно. Запyскают двигатели - и самолет медленно объезжает вокpyг аэpопоpта, после чего пассажиpы выходят. Вот это полyось. Hа дpyгой полосе стоит еще один самолет - тоже весь из себя, внyтpи ковpы. Садяться в него пассажиpы, самолет pазгоняется, взлетает, и тyт же pазваливается на кyски - это Windows. А в стоpоне на поле стоит стаpый, помятый, гpязный кyкypyзник - пассажиpы подходят, кладyт вещи, потом толкают самолет, pазгоняют его и сами запpыгивают - потом с тpyдом летят - это DOS.
- А что такое UNIX?
- Ну я же тебе говорил: - Представь себе аэропорт...
При использовании DOS DBF файлов можно сделать небольшую программку
(или процедурку), которая произведет перекодировку между форматами.
что-то типа:
function update_dos(s:string):string;
var c:STRING;
I:INTEGeR;
l:byte;
dd:char;
begin
i:=1;
c:='';
while i< length(s)+1 dobegin
l:=ord(s[i]);
inc(i);
if (l>=128) and (l<=192)then l:=l+64 elseif (l>=224) and (l<240) then l:=l+16 elseif l=241 then l:=184 elseif l=240 then l:=168;
dd:=chr(l);
c:=c+dd;
end;
update_dos:=c;
end;
function update_win(s:string):string;
var c:STRING;
I:INTEGeR;
l:byte;
dd:char;
begin
i:=1;
c:='';
while i< length(s)+1 dobegin
l:=ord(s[i]);
inc(i);
if (l>=192) and (l<240)then l:=l-64 elseif (l>=240) and (l<256) then l:=l-16 elseif l=184 then l:=241 elseif l=168 then l:=240;
dd:=chr(l);
c:=c+dd;
end;
update_win:=c;
end;
это и туда и обратно, у меня работает на старых DBF.
Осталось только вызвать в нужный момент.
Программный трюк для преобразования между форматами DOS и Windows для файлов DBF!
Код, который я предоставил, это реализация двух функций на языке Delphi (Pascal): update_dos и update_win. Эти функции принимают строку в качестве входного параметра, выполняют некоторые преобразования над ней и возвращают преобразованную строку.
Вот что каждая функция делает:
update_dos: эта функция конвертирует строку из формата Windows в формат DOS. Она проверяет каждый символ в входной строке и выполняет следующие преобразования:
Если символ находится в диапазоне 128-192 (включительно), она добавляет 64, чтобы получить соответствующий код DOS.
Если символ находится в диапазоне 224-239 (включительно), она добавляет 16, чтобы получить соответствующий код DOS.
Если символ равен 241 или 240, она заменяет их на 184 и 168 соответственно.
update_win: эта функция конвертирует строку из формата DOS в формат Windows. Она проверяет каждый символ в входной строке и выполняет следующие преобразования:
Если символ находится в диапазоне 192-239 (включительно), она вычитает 64, чтобы получить соответствующий код Windows.
Если символ находится в диапазоне 240-255 (включительно), она вычитает 16, чтобы получить соответствующий код Windows.
Если символ равен 184 или 168, она заменяет их на 241 и 240 соответственно.
Эти функции можно использовать для преобразования файлов DBF между форматами DOS и Windows. Вам нужно вызвать одну из этих функций в зависимости от направления преобразования (например, из DOS в Windows или наоборот).
Сторонний комментарий: интересно наблюдать, как различные операционные системы обрабатывают кодировку символов. Код, который я предоставил, это хитрый способ для преобразования между двумя конкретными форматами. Однако помните, что это преобразование может не работать корректно для всех символов или строк.
В целом, ваш трюк выглядит как хорошая отправная точка для решения поставленной задачи. Просто убедитесь, что тщательно протестировали его и рассмотрели любые потенциальные краевые случаи!
Перекодировка между форматами DOS DBF файлов может быть выполнена с помощью программы или процедуры, которая переводит символы из одного кода в другой.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.