Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Запись/чтение текущего времени в файл   Найти похожие ветки 

 
jumpingjack ©   (2005-08-04 12:41) [0]

Здравствуйте, помогите. плз! Никак не могу понять в чем может быть проблема. Записываю время в файл. Затем считываю его оттуда, получается примерно такое: 164.172.136, 00:50:255.. подскажите в чем ошибка?

Данные в файл записываю следующим образом:
procedure TForm1.Button3Click(Sender: PObj);
var
 PackNow : TDateTime;
 Package : string;
 OutFile : File;
 PackLen : Integer;
begin
 // Узнаем время
 PackNow := Now;

 // Формируем Package
 Package := chr(str2int(Date2StrFmt("dd", PackNow)));
 Package := Package + chr(str2int(Date2StrFmt("MM", PackNow)));
 Package := Package + chr(str2int(Date2StrFmt("yy", PackNow)));
 Package := Package + chr(str2int(Time2StrFmt("hh", PackNow)));
 Package := Package + chr(str2int(Time2StrFmt("mm", PackNow)));
 Package := Package + chr(str2int(Time2StrFmt("ss", PackNow)));  
 PackLen := Length(Package);
 
 AssignFile(OutFile, Edit1.Text);
 if FileExists(Edit1.Text) then      
 begin
  // Если файл существует, открываем и ищем конец файла
   Reset(OutFile, 1);
   while not eof(OutFile) do BlockRead(OutFile, j, 1);
 end
 else Rewrite(OutFile, 1);
   
 BlockWrite(OutFile, PackLen, 2);               // Записываем длину последующей записи
 BlockWrite(OutFile, Package, Length(Package)); // Записываем Package  
 CloseFile(OutFile);
end;


Читаю так:
procedure TForm1.Button2Click(Sender: PObj);
var
 F         : File;
 Package   : array [0..MaxN] of char;
 TimeStr   : String;
 BSize     : Integer;
begin
 AssignFile(F, Edit1.Text);
 Reset(F, 1);
 ComboBox1.Clear;
 while not EOF(F) do
 begin
   Package := "";
   BlockRead(F, BSize, 2);        // Узнаем размер последующей записи
   BlockRead(F, Package, BSize);  // Читаем запись
   TimeStr := "";
   if Length(int2str(Ord(Package[0]))) < 2 then TimeStr := "0";
   TimeStr := TimeStr + int2str(Ord(Package[0])) + ".";
   if Length(int2str(Ord(Package[1]))) < 2 then TimeStr := TimeStr + "0";
   TimeStr := TimeStr + int2str(Ord(Package[1])) + ".";
   if Length(int2str(Ord(Package[2]))) < 2 then TimeStr := TimeStr + "0";
   TimeStr := TimeStr + int2str(Ord(Package[2])) + ", ";
   if Length(int2str(Ord(Package[3]))) < 2 then TimeStr := TimeStr + "0";
   TimeStr := TimeStr + int2str(Ord(Package[3])) + ":";
   if Length(int2str(Ord(Package[4]))) < 2 then TimeStr := TimeStr + "0";
   TimeStr := TimeStr + int2str(Ord(Package[4])) + ":";
   if Length(int2str(Ord(Package[5]))) < 2 then TimeStr := TimeStr + "0";
   TimeStr := TimeStr + int2str(Ord(Package[5]));    
   ComboBox1.Add(TimeStr);  
 end;
 CloseFile(F);
end;



 
Thaddy   (2005-08-04 13:08) [1]

This code is shit, that&#39;s the problem ;)
Use Date2strFmt and Time2strFmt to encode as string, toghether with *str2DateTimeFmt* to decode to date.
See the good! documentation inside KOL.PAS.
Also you could usethe systemtime things instead.


 
jumpingjack ©   (2005-08-04 13:44) [2]

Насколько я понял тут проблема в форматах чтения/записи в BlockRead\BlockWrite.. т.к., когда я работал с текстовым файлом - все было хорошо с Date2StrFmt!


 
pRibambAs   (2005-08-05 12:29) [3]

Если так хочется писать дату в бинарном виде, то уж лучше использовать TDateTime. Правда, запись будет занимать в файле на два байта больше, чем в твоем нынешнем коде. Но геморроя куда меньше: TDateTime легко конвертится во что хочешь.


 
jumpingjack ©   (2005-08-05 20:18) [4]

Проблема была в том, что я записывал строки большие чем 250 символов в файл через blockwrite. Я вообще отказался от строк и записываю время через переменные byte - теперь все работает :)


 
Anatoly Podgoretsky ©   (2005-08-06 15:33) [5]

Зачем вставляешь месяц во временную часть.
Дни 10..31 тебя явно не интерусуют.
В общем куча ошибок.

Зачем делаешь такую кучу операций, когда все делается с помощью одного вызова
Package := FormatDateTime("ddMMyyhhnnss", Now);



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
15-1141287739
Ламот
2006-03-02 11:22
2006.03.26
Ms Exchange 2000 &amp; Win2000 server


2-1142110719
afisher
2006-03-11 23:58
2006.03.26
как связывать данные переменной между формами?


8-1130080534
!Trinix
2005-10-23 19:15
2006.03.26
3D painting


2-1141940683
xroot
2006-03-10 00:44
2006.03.26
Наитупей6ий вопрос


15-1141470897
DenMaster
2006-03-04 14:14
2006.03.26
Можно ли такое сделать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский