Hallo capo,
es ist ohne weiteres möglich, meinen und marabus Code zusammenzuführen. Die Routine
DoLine erhält alle gültigen Zeilen der Eingabedatei. Hier kann also die Überprüfung auf fehlende Zeilen vorgenommen werden. Die notwendige Variable
LastSeconds aus meinem Code bringst du am besten im private-Abschnitt des Formulars unter, die Initialisierung der Variablen in der Methode
FormCreate.
Zwei kleine Änderungen würde ich an marabus Code noch vornehmen. Das fehlende "else" hast du wahrscheinlich schon entdeckt, die Umschaltung der Variablen
index sollte meiner Meinung nach nur nach einer gültigen Zeile vorgenommen werden. Ansonsten erscheinen mehrfache doppelte Zeilen, die durch Leerzeilen unterbrochen werden, mehrfach im Ausgabeprotokoll.
Delphi-Quellcode:
type
TDemoForm = class (TForm)
:
private
LastSeconds : Integer;
end;
procedure TDemoForm.FormCreate(Sender: TObject);
begin
LastSeconds := -1;
end;
procedure TDemoForm.CheckForMissingLines (line: String);
var
DT : TDateTime;
NewSeconds : Integer;
i : Integer;
begin
DT := StrToTime(Copy(line, 1, 8));
NewSeconds := Round(86400 * DT);
if (LastSeconds >= 0) then
for i := LastSeconds + 1 to NewSeconds - 1 do
LogMemo.Lines.Add(Format('Eintrag für Uhrzeit %s fehlt', [TimeToStr(i / 86400)]));
LastSeconds := NewSeconds;
end;
procedure TDemoForm.DoLine(lineCount: Integer; line: String);
begin
CheckForMissingLines (line);
KeepMemo.Lines.Add(line);
end;
procedure TDemoForm.DoEmptyLine(lineCount: Integer);
begin
LogMemo.Lines.Add(Format('Zeile %d ist leer', [lineCount]));
end;
procedure TDemoForm.DoSameLine(lineCount: Integer; line: String);
begin
LogMemo.Lines.Add(Format('Zeile %d ist doppelt: %s', [lineCount, line]));
end;
procedure TDemoForm.CheckText(fn: TFileName);
var
tf: TextFile;
index, lineCount: Integer;
lines: array [0..1] of String;
begin
lines[0] := '';
lines[1] := '';
lineCount := 0;
index := 0;
KeepMemo.Clear;
LogMemo.Clear;
AssignFile(tf, fn);
Reset(tf);
while not Eof(tf) do
begin
Inc(lineCount);
ReadLn(tf, lines[index]);
// Test auf Leere
if lines[index] = '' then
DoEmptyLine(lineCount) else
// Test auf Gleichheit
if Copy(lines[0], 1, 8) = Copy(lines[1], 1, 8) then
DoSameLine(lineCount, lines[index])
// Sonst
else // <<-- dieses else fehlte
begin
DoLine(lineCount, lines[index]);
index := 1 - index; // <<-- Umschaltung nur nach gültigen Zeilen
end;
end;
CloseFile(tf);
end;
Gruß Hawkeye