Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
3-1138702466
Huk
2006-01-31 13:14
2006.03.26
ClientDataSet


2-1141732556
Grey.pmr
2006-03-07 14:55
2006.03.26
Как включить в текст программы на Делфи прогу на паскале?


15-1140904369
Grol
2006-02-26 00:52
2006.03.26
Технология устранения ошибок в программе


15-1141472956
ipashkov
2006-03-04 14:49
2006.03.26
Глюки с Delphi IDE под Windows Server 2003


2-1140887696
Новочеркасский Волк
2006-02-25 20:14
2006.03.26
Нажата ли клавиша вообше???