Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


jumpingjack ©   (2005-08-04 12:41:00) 

Здравствуйте, помогите. плз! Никак не могу понять в чем может быть проблема. Записываю время в файл. Затем считываю его оттуда, получается примерно такое: 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;


Anatoly Podgoretsky   (2005-08-06 15:33:00) [1]

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

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


jumpingjack   (2005-08-05 20:18:00) [2]

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


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

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


jumpingjack   (2005-08-04 13:44:00) [4]

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


Thaddy   (2005-08-04 13:08:00) [5]

This code is shit, that'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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо