Форум: "Базы";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];
ВнизДекодирование сжатого формата даты ?!?!? Найти похожие ветки
← →
firefox (2003-06-25 12:41) [0]У меня следующая проблема... Некая фирма поставила ПО под ДОС на Clipper-е... использует dbf... но не совсем обычно.... все данные представляющие дату преобразуються к типу Character длинною 2 символа.... мне же из программы на ObjPascal (D6) необходимо читать эти даты... запросил у конторы алгоритм декодирования:
Для "распаковки" дат "упакованного" формата из наших файлов необходимо воспользоваться следующим алгоритмом:
1. строка представляющая упакованную дату приводится к переменной типа WORD.
(через указатель на память и приведение типов)
2. в полученном числе байты переставляются местами.
3. данное число есть число дней от 01/01/1900 года. Т.е. к 01/01/1900
прибавляется полученное число и на выходе получаете распакованную дату.
Не совсем понимаю что имелось ввиду в п.1... может кто сталкивался или кого нить озарит... Спасибо.
← →
Johnmen (2003-06-25 12:58) [1]А что тут не понять ? Не строка это, а последовательность из 2-ух байтов, то есть word.
Про упаковку дат таким образом было описано еще в доках по TurboPascal
← →
firefox (2003-06-25 13:03) [2]Хорошо.... для тупых (меня) каким образом выполняеться п.1.. (в примере можно? а то у меня фигня получаеться.... :()
и нафига разменивать байты?
← →
sniknik (2003-06-25 13:04) [3]судя по всему подложили тебе больщую свинью... ;о)
не их с алгоритмом все понятно, но в вариантах где дата одним байтом совпадет по значению #32, #0 не получиш истинную дату строка обрежется или ее совсем не будет (первый байт). также проблема будет если используеш Langdriver, фактически нельзя его использовать :(. т.е. даты будут или пропадать или совсем другие. решения в зависимости от движка базы может и не быть вовсе.
что до алгоритма то он довольно прост
var st: string[2];
wd: word absolute st[1];
GodData: TDateTime;
begin
st:= FieldByname("BadData").AsString;
GodData:= StrToDate(01/01/1900)+wd;
примерно так, не учитывая ограничений и всей остальной пое%№ни. сочуствую.
p.s. найди компонент (или сам пиши), который может давать значения полей as is, без этого все бессмысленно.
← →
HSolo (2003-06-25 14:34) [4]А зачем искать-то? Есть же BDE с его API
DbiGetRecord и иже с ним
← →
sniknik (2003-06-25 14:54) [5]HSolo © (25.06.03 14:34)
наверное подойдет, надо посмотреть только как он возвращает, и наверное удобнее использовать DbiGetField.
сам я Halcyon использую, с BDE почти не сталкиваюсь, поэтому всех возможностей не знаю. но если он действительно так работает как предполагаем (as is), то все, проблем нет.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c