![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте у меня есть система логов, то есть копирование текста из программы в тхт файл. Дак вот возникла надобность сделать имена логов как дата и время. Т.е. к примеру 18ч01м2009г19ч18м32с.txt
Дак вот проблема в том, что мне надо, что бы когда пользователь запустил программу и прошло 10 секунд (таймер у меня уже есть) создался лог файл и при прохождение ещё 10 секунд, не создавался бы лог файл, а записывался в первый и так пока программа не будет закрыта и запущена снова. Пытался сделать, вот последние мои опыты: Код:
procedure Timelog(i:integer);
var lt: TSYSTEMTIME;
s:string;
begin
GetLocalTime(lt);
if (i = 1) then
AddLog(form1.script.Text,s+'.txt')
else
s:= IntToStr(lt.wDay) + 'ч' +
IntToStr(lt.wmonth) + 'м' +
IntToStr(lt.wYear) + 'г' +
IntToStr(lt.wHour) + 'ч' +
IntToStr(lt.wMinute) + 'м' +
IntToStr(lt.wSecond) + 'с';
AddLog(form1.script.Text,s+'.txt');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
i:=i+1;
if (form13.ComboBox1.ItemIndex = 2) then
Timer1.Enabled:=false
else
if (i=1) then
Timelog(0)
else
Timelog(1);
end;Подскажите пожалуйста. |
|
#2
|
||||
|
||||
|
Не совсем понял вопрос, но если вам необходимо создавать файл лога с названием даты, то можно это сделать очень просто:
TimeToStr(Time) - возвратит время (например: 17:31:51) DateToStr(Date) - возвратит саму дату. Записывать в файл я думаю вы умеете, создаете файл (вот пример): Код:
var f:textfile; begin ... AssignFile(f, 'C:\'+DateToStr(Date)+'.txt'); // и потом уже записываете в сам файл (например reset(f) и бла бла бла) ... CloseFile(f); |
|
#3
|
|||
|
|||
|
Этот вариант не устраивает так как, в файлах не должно быть двоеточий, винда не позволяет.
|
|
#4
|
||||
|
||||
|
А что мешает заменить двоеточия на другой символ?
|
|
#5
|
||||
|
||||
|
Цитата:
Пройтись циклом по полученной строке приеняя StuffString функцию |
|
#6
|
||||
|
||||
|
Как я понял, вам необходимо добавлять в лог каждые 10сек некие записи.
Можно конечно на каждый сеанс делать свой лог-файл, но мне кажется лучше сделать один лог-файл с разделами для каждого сеанса. Для этого мне кажется очень удобно воспользоваться классом TIniFile. Выглядеть тогда это будет так: Код:
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, IniFiles;
type
TForm7 = class(TForm)
ProgressBar1: TProgressBar;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
Log: TIniFile;
StartApp: String;
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
procedure TForm7.FormCreate(Sender: TObject);
begin
StartApp := DateTimeToStr(Now);
end;
procedure TForm7.FormDestroy(Sender: TObject);
begin
Log.Free;
end;
procedure TForm7.Timer1Timer(Sender: TObject);
begin
Log := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Journal.log');
Log.WriteString(StartApp,DateTimeToStr(Now),'... и они еще посидели немножко.');
ProgressBar1.StepIt;
Application.ProcessMessages;
if ProgressBar1.Position = ProgressBar1.Max then Close;
end;
end.Последний раз редактировалось Страдалецъ, 08.10.2010 в 19:13. |
|
#7
|
|||
|
|||
|
Возможно так удобнее, но не для моего случая. В ричедите может быть строк более 500. А потом в 1 файле искать определённую сессию не удобно.
Цитата:
Последний раз редактировалось Мяфк, 08.10.2010 в 19:27. |
|
#8
|
||||
|
||||
|
Не знаю, надо это тебе или нет, то может поможет:
ВСЕ функции для работы с временем/датой в делфи: http://www.cyberguru.ru/programming/...t1-page11.html Вот еще: http://www.codenet.ru/progr/delphi/O...l/datetime.php |
|
#9
|
||||
|
||||
|
А вам не все равно откуда грузить данные в рич за сеанс, из файла или из секции? И в первом и втором случае вы будете из списка файлов/секций выбирать нужный и загружать, но в случае множества файлов имеем загромождение каталога, лишнюю трату дискового пространства на каждый файл да еще лишние телодвижения на открытие/закрытие нужного файла.
В моем-же варианте можно сразу грузить нужную секцию в рич: Код:
Log.ReadSection('08.10.2010 19:07:52',RichEdit1.Lines); |
|
#10
|
|||
|
|||
|
Да как бы логи мне нужны, что бы просматривать их не програмно, а в обычном текстовике. Ну можно и такой вариант, посмотрю. Спасибо.
|
|
#11
|
|||
|
|||
|
Пытался сделать, так: Если ричедит не изменяет текст, то лог не записывается. Вот код:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var s:string; begin if (s<>form1.script.text) then begin s:=form1.script.text; Log := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Journal.log'); Log.WriteString(StartApp,DateTimeToStr(Now),s); end else end; UPD. Решил проблему. Объявил глобальную переменную nado. А дальше Код:
procedure TForm1.scriptChange(Sender: TObject); begin nado := 1; end; Код:
procedure TForm1.Timer1Timer(Sender: TObject); var s:string; begin if (nado = 1) then begin s:=form1.script.text; Log := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Journal.log'); Log.WriteString(StartApp,DateTimeToStr(Now),s); nado := 0; end else end; Последний раз редактировалось Мяфк, 08.10.2010 в 23:32. |