![]() |
|
#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
|
||||
|
||||
![]() А что мешает заменить двоеточия на другой символ?
IDE := Embarcadero.RADStudio.XE.Architect // Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук © |
#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. |