Форум: "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'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.46 MB
Время: 0.055 c