uMain.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. unit uMain;
  2. interface
  3. uses
  4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.IOUtils, System.IniFiles,
  5. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, IdStream, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  6. IdHTTP, System.DateUtils, Generics.Collections, Generics.Defaults, Vcl.ComCtrls;
  7. type
  8. TForm1 = class(TForm)
  9. lbledtURL: TLabeledEdit;
  10. btnDownloadLogfiles: TButton;
  11. lbledtMaxLogfilesOnServer: TLabeledEdit;
  12. lbledtTargetDirectory: TLabeledEdit;
  13. idhtp1: TIdHTTP;
  14. lbledtCsvFile: TLabeledEdit;
  15. redtLog: TRichEdit;
  16. lblImpressum: TLabel;
  17. procedure btnDownloadLogfilesClick(Sender: TObject);
  18. procedure FormCreate(Sender: TObject);
  19. procedure FormDestroy(Sender: TObject);
  20. private
  21. { Private declarations }
  22. mINI: TINIFile;
  23. function DownloadFile(pURL: string; pDestFileName: string): boolean;
  24. function LoadValue(const pFileName: string): Extended;
  25. procedure LoadCSV(const pFileName: string);
  26. procedure SaveCSV(const pFileName: string);
  27. procedure LoadINI;
  28. procedure WriteINI;
  29. public
  30. { Public declarations }
  31. end;
  32. var
  33. Form1: TForm1;
  34. implementation
  35. {$R *.dfm}
  36. procedure TForm1.btnDownloadLogfilesClick(Sender: TObject);
  37. var
  38. lclDateString: string;
  39. lclFilename: string;
  40. i: Integer;
  41. lclValue: Extended;
  42. begin
  43. redtLog.Clear;
  44. LoadCSV(lbledtCsvFile.Text);
  45. for i := StrToInt(lbledtMaxLogfilesOnServer.Text) downto 1 do
  46. begin
  47. DateTimeToString(lclDateString, 'yyyy-mm-dd', incDay(Now, -i));
  48. lclFilename := 'log_' + lclDateString + '.txt';
  49. if (redtLog.FindText(lclDateString, 0, Length(redtLog.Lines.Text), [stWholeWord]) = -1) then
  50. begin
  51. if DownloadFile(lbledtURL.Text + lclFilename, lbledtTargetDirectory.Text + lclFilename) then
  52. begin
  53. lclValue := LoadValue(lbledtTargetDirectory.Text + lclFilename);
  54. redtLog.Lines.Add(lclDateString + ';' + FloatToStrF(lclValue, ffFixed, 8, 2));
  55. end;
  56. end;
  57. end;
  58. SaveCSV(lbledtCsvFile.Text);
  59. end;
  60. procedure TForm1.LoadCSV(const pFileName: string);
  61. var
  62. Txt: TextFile;
  63. s: string;
  64. begin
  65. if FileExists(pFileName) then
  66. begin
  67. AssignFile(Txt, pFileName);
  68. Reset(Txt);
  69. while not Eof(Txt) do
  70. begin
  71. Readln(Txt, s);
  72. redtLog.Lines.Add(s);
  73. end;
  74. CloseFile(Txt);
  75. end
  76. else
  77. begin
  78. redtLog.Lines.Add('Date;Value');
  79. end;
  80. end;
  81. procedure TForm1.LoadINI;
  82. begin
  83. lbledtURL.Text := mINI.ReadString('MAIN', 'URL', 'http://192.168.10.65/fileserver/log/message/');
  84. lbledtMaxLogfilesOnServer.Text := mINI.ReadString('MAIN', 'CountLogfiles', '30');
  85. lbledtTargetDirectory.Text := mINI.ReadString('MAIN', 'Log', 'C:\Temp\Gas\');
  86. lbledtCsvFile.Text := mINI.ReadString('MAIN', 'CsvFile', 'C:\Temp\Gas\Values.csv');
  87. end;
  88. function TForm1.LoadValue(const pFileName: string): Extended;
  89. var
  90. Txt: TextFile;
  91. s: string;
  92. lclStartPos: Integer;
  93. lclEndPos: Integer;
  94. begin
  95. Result := 0;
  96. AssignFile(Txt, pFileName);
  97. Reset(Txt);
  98. while not Eof(Txt) do
  99. begin
  100. Readln(Txt, s);
  101. if (AnsiPos('Value: ', s) <> 0) and (AnsiPos(' Error: no error', s) <> 0) then
  102. begin
  103. lclStartPos := AnsiPos('Value: ', s) + 7;
  104. lclEndPos := AnsiPos(' Error: no error', s) - lclStartPos;
  105. s := StringReplace(s, '.', ',', [rfReplaceAll, rfIgnoreCase]);
  106. Result := StrToFloat(Copy(s, lclStartPos, lclEndPos));
  107. end;
  108. end;
  109. CloseFile(Txt);
  110. end;
  111. procedure TForm1.SaveCSV(const pFileName: string);
  112. begin
  113. TFile.WriteAllText(pFileName, redtLog.Lines.Text);
  114. end;
  115. procedure TForm1.WriteINI;
  116. begin
  117. mINI.WriteString('MAIN', 'URL', lbledtURL.Text);
  118. mINI.WriteString('MAIN', 'CountLogfiles', lbledtMaxLogfilesOnServer.Text);
  119. mINI.WriteString('MAIN', 'Log', lbledtTargetDirectory.Text);
  120. mINI.WriteString('MAIN', 'CsvFile', lbledtCsvFile.Text);
  121. end;
  122. function TForm1.DownloadFile(pURL: string; pDestFileName: string): boolean;
  123. var
  124. Http: TIdHTTP;
  125. FS: TFileStream;
  126. begin
  127. Result := true;
  128. ForceDirectories(ExtractFileDir(pDestFileName));
  129. FS := TFileStream.Create(pDestFileName, fmCreate);
  130. try
  131. try
  132. Http := TIdHTTP.Create(nil);
  133. try
  134. Http.Get(pURL, FS);
  135. finally
  136. Http.Free;
  137. end;
  138. finally
  139. FS.Free;
  140. end;
  141. except
  142. DeleteFile(pDestFileName);
  143. Exit(false);
  144. end;
  145. end;
  146. procedure TForm1.FormCreate(Sender: TObject);
  147. begin
  148. mINI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini');
  149. LoadINI;
  150. redtLog.Clear;
  151. lblImpressum.Caption := 'reserve, 2022' + #13#10 + 'free to copy and modify'
  152. end;
  153. procedure TForm1.FormDestroy(Sender: TObject);
  154. begin
  155. WriteINI;
  156. FreeAndNil(mINI);
  157. end;
  158. end.