AGB  ·  Datenschutz  ·  Impressum  







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

Textdatei mit TFileStream

Ein Thema von EConvertError · begonnen am 24. Dez 2005 · letzter Beitrag vom 25. Dez 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Textdatei mit TFileStream

  Alt 24. Dez 2005, 16:24
bei großen Dateien bin ich der Meinung das dein Vorschlag gut ist. Denn wie du bereits geschrieben hast wird bei Stringlisten die gesammte Datei in den speicher geladen was nicht gerade performant ist. Und da wir schon einige Jahre objectorientiert programmieren bin ich auch dafür das TFilestream anstelle von AssignFile genutzt wird (selbst wenn es intern vielleicht auch noch genutzt wird)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Textdatei mit TFileStream

  Alt 24. Dez 2005, 16:31
Moin Andreas,

Zitat von EConvertError:
Nachdem aber der TFileStream keine Funktionen für das zeilenweise Herauslesen bietet
wie wäre es mit TStringStream?
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
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#13

Re: Textdatei mit TFileStream

  Alt 24. Dez 2005, 16:38
Meine Programm ist ein Netzwerk Traffic Monitor und pro Tag und Session wird eine neue Zeile erstellt, was für ein Jahr (und mein Benutzer möchte gerne ein Jahr loggen) also 365*2 Zeilen bedeutet, wenn man annimmt, dass pro Tag eine Session stattfindet. Meiner Meinung nach fällt das unter große Datei...

Der StringStream interessiert mich sehr, aber wenn ich folgenden Code ausführe, lädt er die Datei doch auch als ganzes in den RAM, oder?
StringStream.CopyFrom(FileStream); Frohe Weihnachten,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Textdatei mit TFileStream

  Alt 24. Dez 2005, 16:40
mit folgendem Source kannst du eine bestimmte Zeile aus einem Stream lesen (ab Stream Position)
Delphi-Quellcode:
function GetLine(AStream: TStream; ALineNumber: Integer): String;
var LBuffer2, LBuffer: String;
    LCurrLine, LBytes, LBreakPos: Integer;
begin
  result := '';
  SetLength(LBuffer2, 50);
  LCurrLine := 0;
  while (LCurrLine <= ALineNumber) and (AStream.Position < AStream.Size) do
  begin
    LBytes := AStream.Read(LBuffer2[1], 50);
    LBuffer := copy(LBuffer2, 1, LBytes);
    repeat
      LBreakPos := Pos(#13#10, LBuffer);
      if LCurrLine = ALineNumber then
      begin
        if LBreakPos > 0 then
          result := result + copy(LBuffer, 1, LBreakPos - 1)
        else
          result := result + LBuffer;
      end;
      if LBreakPos > 0 then
      begin
        LBuffer := copy(LBuffer, LBreakPos + 2, 50);
        inc(LCurrLine);
      end;
    until (LBreakPos < 1) or (ALineNumber < LCurrLine);
  end;
end;
geht bestimmt noch eleganter aber als Anregung sollte es reichen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#15

Re: Textdatei mit TFileStream

  Alt 25. Dez 2005, 08:51
Danke, diese Funktion sieht sehr gut aus. Dann werde ich die Datei wohl mit dem TFileStream herauslesen.

@Christian Seehase: Wie hast du das mit dem TStringStream gemeint? CopyFrom() kopiert doch die gesamte Datei in den RAM?

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Textdatei mit TFileStream

  Alt 25. Dez 2005, 11:45
Moin Andreas,

ich meinte, dass Du Dir mal TStringStream als Ersatz für TFileStream anschaust.
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
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#17

Re: Textdatei mit TFileStream

  Alt 25. Dez 2005, 14:13
Hmmm, entweder ich sitze auf der Leitung, oder wir haben hier ein Missverständnis.
Wie soll ich denn den TStringStream statt TFileStream verwenden, wenn ich mit einer Datei arbeite?

Edit:
Meinst du, dass ich die Blöcke, die ich aus dem TFileStream lese, zum Bearbeiten in den TStringStream schreiben soll, anstatt umständlich "herumzuparsen"?
Andreas N.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:01 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