Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überprüfen ob alle Zeilen vorhanden sind (https://www.delphipraxis.net/72664-ueberpruefen-ob-alle-zeilen-vorhanden-sind.html)

Neon-chan 5. Jul 2006 07:51

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Über die Zeitspanne würde ich es auch machen...TTime ist ja nichts anderes als ne real-Zahl

Mach dir am Anfang eine Vergleichsvariabel zB check := strtoTime('00:00:01') dann musst du zum überprüfen nurnoch abfragen ob Timestamp aktuelle Zeile - Timestamp vorherige zeile = check

horst 5. Jul 2006 08:56

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Ist es dann egal ob noch andere Zahlen im Text stehen?
Irgendwie blick ich das mit dem auslesen nicht.

mquadrat 5. Jul 2006 09:03

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Du musst als erstes mal die Uhrzeiten aus deinen Zeilen isolieren. Da du ein festes Format hast, kannst du das direkt per Copy() machen. Dann hast du einen String, der nur noch die Uhrzeit enthält und kannst die Vergleiche mittels StrToDateTime machen, wie oben schon beschrieben.

Hawkeye219 5. Jul 2006 09:51

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Hallo Horst,

hier ist ein Ansatz:

Delphi-Quellcode:
procedure CheckLog (const aFilename: string);
  var DT         : TDateTime;
      F          : TextFile;
      i          : Integer;
      LastSeconds : Integer;
      Line       : string;
      NewSeconds : Integer;
begin
  AssignFile (F, aFilename);
  Reset (F);
  LastSeconds := -1;
  while not Eof(F) do
    begin
      ReadLn (F, Line);
      DT := StrToDateTime(Copy(Line, 1, 19));
      // Uhrzeit in Sekunden umrechen
      NewSeconds := Round(86400 * Frac(DT));
      // bei der ersten Zeile erfolgt keine Prüfung
      if (LastSeconds >= 0) then
        for i := LastSeconds + 1 to NewSeconds - 1 do
          ShowMessage (Format('Zeile %d fehlt', [i]));
      LastSeconds := NewSeconds;
    end;
  CloseFile (F);
end;
Es ist keine vollständige Lösung, es fehlen beispielsweise ein paar Absicherungen gegen fehlerhafte Daten. Falls die Datei ein Protokoll über mehrere Tage enthält, wirst du weitere Abfragen einbauen müssen. Die Routine erwartet nach Uhrzeit aufsteigend sortierte Einträge.

Gruß Hawkeye

horst 5. Jul 2006 10:09

Re: Überprüfen ob alle Zeilen vorhanden sind
 
@Hawkeye219
vielen Dank, damit kann ich auf jeden Fall was anfangen.
Nur noch die doppelten Zeilen herausfinden.
Gruß
Horst

capo 7. Jul 2006 16:41

Re: Überprüfen ob alle Zeilen vorhanden sind
 
hi
ich hab ein ähnliches problem, ich lese nur kein datum aus.
ich hab auch noch ein problem mit den doppelten zeilen, auch wie ich das problem mit den leerzeilen umgehen kann,
da gibts immer fehler?

gruss, capo

marabu 7. Jul 2006 17:17

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Herzlich willkommen in der Delphi-PRAXiS, capo.

Die Prüfung auf doppelte (aufeinander folgende) oder leere Zeilen funktioniert vom Prinzip her so:

Delphi-Quellcode:
procedure CheckText(fn: TFileName);
var
  tf: TextFile;
  index, lineCount: Integer;
  lines: array [0..1] of String;
begin
  lines[0] := '';
  lines[1] := '';
  lineCount := 0;
  index := 0;
  AssignFile(tf, fn);
  Reset(tf);
  while not Eof(tf) do
  begin
    Inc(lineCount);
    ReadLn(tf, lines[index]);
    // Test auf Leere
    if line[index] = '' then
      DoEmptyLine(lineCount) else
    // Test auf Gleichheit
    if lines[0] = lines[1] then
      DoSameLine(lineCount, lines[index])
    // Sonst
      DoLine(lineCount, lines[index]);
    index := 1 - index;
  end;
  CloseFile(tf);
end;
Freundliche Grüße vom marabu

capo 7. Jul 2006 17:38

Re: Überprüfen ob alle Zeilen vorhanden sind
 
hi marabu :-D

danke.
ich hab doch nochmal einige fragen, wieso wird in deinem beispiel ein
Delphi-Quellcode:
lines: array [0..1] of String;
verwendet und in dem von horst
ein string für line(s) ?

ich hatte das so gemacht, funktioniert aber nicht
Delphi-Quellcode:
 // Eine Zeile doppelt vorhanden?
if (NewSeconds = LastSeconds) then
Form1.ListBox1.Items.Add('   ' + TimeToStr(SecondsToTime(i - 1)) + '   ' + '---------------> Zeile doppelt vorhanden');

capo

marabu 7. Jul 2006 21:16

Re: Überprüfen ob alle Zeilen vorhanden sind
 
Hi Capo,

ich hatte nicht verstanden, dass am Beginn deiner Zeilen eine Zeitangabe steht, deshalb ist mein Lösungsansatz etwas generisch. Du kannst ihn aber etwa so an deine Bedürfnisse anpassen:

Delphi-Quellcode:
procedure TDemoForm.DoLine(lineCount: Integer; line: String);
begin
  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 line[index] = '' then
      DoEmptyLine(lineCount) else
    // Test auf Gleichheit
    if Copy(lines[0], 1, 8) = Copy(lines[1], 1, 8) then
      DoSameLine(lineCount, lines[index]) else
    // Sonst
      DoLine(lineCount, lines[index]);
    index := 1 - index;
  end;
  CloseFile(tf);
end;
Der Ansatz unterscheidet sich geringfügig von Hawkeyes Ansatz.

Besser du findest die Bedeutung des lines array selbst heraus - andernfalls wird dir sicher noch geholfen.

Gute Nacht
marabu

Edit: Fehlendes ELSE eingefügt - danke Hawkeye

capo 8. Jul 2006 00:55

Re: Überprüfen ob alle Zeilen vorhanden sind
 
hallo marabu
dein beispiel funktioniert super.

ich komme damit an einem punkt nicht weiter und zwar mit der uhrzeit.
im beispiel von Hawkeye bekomme ich noch die fehlenden uhrzeiten angezeigt

Zitat:

03:15:03
03:15:05
03:15:07
03:15:08
ich habe versucht dein beispiel mit dem beispiel von Hawkeye zu kombinieren, aber irgendwie will es nicht so wie ich will.


gute nacht
capo


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz