AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einlesen von Datei mittels TFileStream

Ein Thema von faux · begonnen am 1. Jun 2006 · letzter Beitrag vom 3. Jun 2006
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Einlesen von Datei mittels TFileStream

  Alt 1. Jun 2006, 22:23
Hallo!

Also ich schreibe ein LogFile ine Datei mittels FileStream. Ich schreibe pro Zeile immer einen Logeintrag.
Eine Zeile beginnt immer so:
Code:
[b]NUL[/b][yyyy-mm-dd hh:mm:ss] [LogType] Logeintrag
Also jede Zeile beginnt mit einem 0-Zeichen.
Wie kann ich jetzt diese Zeilen wieder einlesen?
Ich habe bis jetzt so gut wie noch nichts mit FileStreams gemacht und will jede LogZeile (also von NUL bis NUL) in ein StringGrid laden. Könnte mir wer da ein Beipiel geben bitte?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#2

Re: Einlesen von Datei mittels TFileStream

  Alt 1. Jun 2006, 22:36
Schreib einen String in die Datei mit den Zeichen #13#10 am Ende (Zeilenumbruch).
Dann kannst du die Datei nachher mit einer TStringList einlesen und kannst auf die Zeilen zugreifen.
Du könntest das Schreiben auch gleich mit einer STringList machen, aber der TFileStream bietet sich wegen seines sofortigen Schreibens an.

Öffne den FileStream so:

Delphi-Quellcode:
var
 FS: TFileStream;
begin
 FS := TFileStream(FileName, fmOpenWrite);
 try
   FS.Seek(0, soFromEnd);

   FS.WriteBuffer(S[1], Length(S)); //S ist dein String mit #13#10 am Ende
 finally
   FS.Free;
 end;
end;
Ich hoffe das hilft dir weiter!
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Einlesen von Datei mittels TFileStream

  Alt 1. Jun 2006, 22:48
Zitat von F.W.:
Schreib einen String in die Datei mit den Zeichen #13#10 am Ende (Zeilenumbruch).
Ja, das habe ich, aber nur zusätzlich.

Naja, ich sehe gerade dein Vorschlag bezieht sich eher auf das Schreiben, das habe ich aber bereits gelöst. Mir geht es ums Auslesen der Datei.

Aber dein Vorschlag mit der TStringList war mal nicht so schlecht. Habe es so gelöst:
Delphi-Quellcode:
procedure TForm1.RefreshLogClick(Sender: TObject);
var
  LogFile: TFileStream;
  List: TStringList;
  i: Integer;
begin
  LogFile := TFileStream.Create(DllPath + '\sql.log', fmOpenRead or fmShareDenyNone);
  List := TStringList.Create;
  List.LoadFromStream(LogFile);
  for i := 0 to List.Count - 1 do
  begin
    StringGrid1.Cells[1, i] := List[i];
  end;
  List.Free;
  LogFile.Free;
end;
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#4

Re: Einlesen von Datei mittels TFileStream

  Alt 2. Jun 2006, 18:20
Zum Laden einer Textdatei nimm doch die Methode >LoadFromFile< der TStringList
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Einlesen von Datei mittels TFileStream

  Alt 2. Jun 2006, 20:01
Zitat von F.W.:
Zum Laden einer Textdatei nimm doch die Methode >LoadFromFile< der TStringList
Das geht leider nicht, da die Datei gerade gesperrt ist, zum Zeitpunkt des Zugriffs. Wenn ich fmShareDenyNone nicht übergebe, gibts gleich nen Fehler (auch bei LoadFromFile).

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#6

Re: Einlesen von Datei mittels TFileStream

  Alt 3. Jun 2006, 01:03
Ach so, dann ist das natürlich die beste Lösung
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Einlesen von Datei mittels TFileStream

  Alt 3. Jun 2006, 01:50
Auf die temporäre Stringliste könnte man noch verzichten:

Delphi-Quellcode:
procedure TForm1.RefreshLogClick(Sender: TObject);
var
  LogFile: TFileStream;
begin
  LogFile := TFileStream.Create(DllPath + '\sql.log', fmOpenRead or fmShareDenyNone);
  StringGrid1.Cols[1].LoadFromStream(LogFile);
  LogFile.Free;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Einlesen von Datei mittels TFileStream

  Alt 3. Jun 2006, 06:08
Zitat von Hawkeye219:
Auf die temporäre Stringliste könnte man noch verzichten:

Delphi-Quellcode:
procedure TForm1.RefreshLogClick(Sender: TObject);
var
  LogFile: TFileStream;
begin
  LogFile := TFileStream.Create(DllPath + '\sql.log', fmOpenRead or fmShareDenyNone);
  StringGrid1.Cols[1].LoadFromStream(LogFile);
  LogFile.Free;
end;
Gruß Hawkeye
Ja, das habe ich mittlerweile auch so gemacht, Danke.
Ich wollte ursprünglich das ganze noch etwas verändern, deswegen die StringList.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Einlesen von Datei mittels TFileStream

  Alt 3. Jun 2006, 12:53
Moin Manuel,

eine Idee hätte ich noch.
Verzichte auf das #00 am Anfang, und #13#10 am Ende.
Schreibe statt dessen die Länge der Zeile vor die Zeile.
Diese dann auslesen, und Du kannst exakt die jeweilige Zeile aus dem Stream lesen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Einlesen von Datei mittels TFileStream

  Alt 3. Jun 2006, 13:01
Zitat von Christian Seehase:
Verzichte auf das #00 am Anfang, und #13#10 am Ende.
Schreibe statt dessen die Länge der Zeile vor die Zeile.
Diese dann auslesen, und Du kannst exakt die jeweilige Zeile aus dem Stream lesen.
Gute Idee! Werde ich mirmerken, da ich das sicherlich nochmal brauche.
Danke!

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:42 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