AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Überprüfen ob alle Zeilen vorhanden sind
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob alle Zeilen vorhanden sind

Ein Thema von horst · begonnen am 4. Jul 2006 · letzter Beitrag vom 12. Jul 2006
Antwort Antwort
Seite 2 von 4     12 34      
Neon-chan

Registriert seit: 25. Okt 2004
24 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 5. Jul 2006, 07:51
Ü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
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 5. Jul 2006, 08:56
Ist es dann egal ob noch andere Zahlen im Text stehen?
Irgendwie blick ich das mit dem auslesen nicht.
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 5. Jul 2006, 09:03
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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 5. Jul 2006, 09:51
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
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 5. Jul 2006, 10:09
@Hawkeye219
vielen Dank, damit kann ich auf jeden Fall was anfangen.
Nur noch die doppelten Zeilen herausfinden.
Gruß
Horst
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 7. Jul 2006, 16:41
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
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 7. Jul 2006, 17:17
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
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 7. Jul 2006, 17:38
hi marabu

danke.
ich hab doch nochmal einige fragen, wieso wird in deinem beispiel ein
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
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 7. Jul 2006, 21:16
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
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Überprüfen ob alle Zeilen vorhanden sind

  Alt 8. Jul 2006, 00:55
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
Hotte
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.
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