Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
1-55649
MsGuns
2003-07-03 19:28
2003.07.17
Чувствительность объектов к перемещениям мыши


1-55499
Versus31
2003-07-04 15:14
2003.07.17
Компиляция из моей программы.


14-55734
Knight
2003-06-30 11:55
2003.07.17
Веб-дизайн


14-55710
Думкин
2003-06-26 07:26
2003.07.17
Флеш


1-55623
Луарвик
2003-07-03 19:20
2003.07.17
CheckListBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский