Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TFileStream: Textdatei auslesen (https://www.delphipraxis.net/37243-tfilestream-textdatei-auslesen.html)

Pseudemys Nelsoni 3. Jan 2005 09:24


TFileStream: Textdatei auslesen
 
hi,

ich möchte aus einer datei meine 15zeichen langen strings auslesen, ich habe mir gedacht das ich es mit einer while schleife mache, nur wie? ich dachte an "while bytesread = 15 do...".
Das würde aber heissen das ich das "Read" von TFileStream VOR der schleife schreiben müsste... aber da das read wiederrum nicht in der schleife ist kann damit auch nur 1 durchgang funktionieren oder?

ich hatte das bis jetzt ca so und weiss nich weiter:

Delphi-Quellcode:
procedure TBL.Load(const AFileName: string);
var
  Fs: TFileStream;
  BytesRead: Integer;
  Buffer: array[1..15] of Char;
begin
  Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
  try
    BytesRead := Fs.Read(Buffer, Length(Buffer));
    while BytesRead = 15 do...
    // hm....
  finally
    Fs.Free;
  end;
end;

Stevie 3. Jan 2005 09:29

Re: TFileStream: Textdatei auslesen
 
Moin,

wie wär's mit
Delphi-Quellcode:
while Fs.Read(Buffer, Length(Buffer)) = 15 do
  // hat geklappt...
MfG
Stevie

Jens Schumann 3. Jan 2005 09:30

Re: TFileStream: Textdatei auslesen
 
Hallo,
versuch es mal wie folgt:
Delphi-Quellcode:
procedure TBL.Load(const AFileName: string);
var
  Fs: TFileStream;
  BytesRead: Integer;
  Buffer: array[1..15] of Char;
begin
  Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
  try
    While Fs.Position<=Fs.Size do
      begin
      BytesRead := Fs.Read(Buffer, Length(Buffer));
       // Hier geht's dann weiter
      end; // While Fs.Position<=Fs.Size do
  finally
    Fs.Free;
  end;
end;

Jens Schumann 3. Jan 2005 09:31

Re: TFileStream: Textdatei auslesen
 
Zitat:

Zitat von Stevie
Moin,

wie wär's mit
Delphi-Quellcode:
while Fs.Read(Buffer, Length(Buffer)) = 15 do
  // hat geklappt...
MfG
Stevie

Das klappt aber nur, wenn sich die Anzahl der Zeichen in der Textdatei ohne Rest durch 15 teilen läßt. Wenn ein Rest auftritt, werden die letzten Zeichen in der Textdatei nicht gelesen.

Stevie 3. Jan 2005 09:33

Re: TFileStream: Textdatei auslesen
 
Zitat:

Zitat von Jens Schumann
Das klappt aber nur, wenn sich die Anzahl der Zeichen in der Textdatei ohne Rest durch 15 teilen läßt. Wenn ein Rest auftritt, werden die letzten Zeichen in der Textdatei nicht gelesen.

Dann guck dir mal die Vorgabe oben an! :roll: :wink:

Pseudemys Nelsoni 3. Jan 2005 09:37

Re: TFileStream: Textdatei auslesen
 
danke euch zwei ;)

btw:

Delphi-Quellcode:
procedure TBL.Load(const AFileName: string);
var
  Fs: TFileStream;
  BytesRead: Integer;
  Buffer: array[1..15] of Char;
begin
  Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
  try
    While Fs.Position<=Fs.Size do
      begin
      BytesRead := Fs.Read(Buffer, Length(Buffer));
       // Hier geht's dann weiter
      end; // While Fs.Position<=Fs.Size do
  finally
    Fs.Free;
  end;
end;

^^^^ dann brauch ich die variable "BytesRead" aber nicht oder?

Stevie 3. Jan 2005 09:39

Re: TFileStream: Textdatei auslesen
 
Es sei denn, du hast wirklich noch nen Rest, und willst den wissen...

Jens Schumann 3. Jan 2005 09:39

Re: TFileStream: Textdatei auslesen
 
Zitat:

Zitat von Pseudemys Nelsoni
danke euch zwei ;)

btw:


^^^^ dann brauch ich die variable "BytesRead" aber nicht oder?

Mit BytesRead kannst Du dann prüfen, ob tatsächlich 15 Bytes gelesen wurden.
Ich würde es sicherheitshalber prüfen bevor ich die Bytes verarbeitete

Luckie 3. Jan 2005 09:41

Re: TFileStream: Textdatei auslesen
 
Das ist nicht sehr günstig ständig Position und Größe abzufragen und zu vergleiche. Besser wäre:
Delphi-Quellcode:
procedure TBL.Load(const AFileName: string);
var
  Fs: TFileStream;
  BytesRead: Integer;
  Buffer: array[1..15] of Char;
begin
  Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
  try
    repeat    
      BytesRead := Fs.Read(Buffer, Length(Buffer));
       // Hier geht's dann weiter
     until BytesRead < sizeof(Buffer);
  finally
    Fs.Free;
  end;
end;

Jens Schumann 3. Jan 2005 09:54

Re: TFileStream: Textdatei auslesen
 
Zitat:

Zitat von Luckie
Das ist nicht sehr günstig ständig Position und Größe abzufragen und zu vergleiche. Besser wäre:
Delphi-Quellcode:
procedure TBL.Load(const AFileName: string);
var
  Fs: TFileStream;
  BytesRead: Integer;
  Buffer: array[1..15] of Char;
begin
  Fs := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
  try
    repeat    
      BytesRead := Fs.Read(Buffer, Length(Buffer));
       // Hier geht's dann weiter
     until BytesRead < sizeof(Buffer);
  finally
    Fs.Free;
  end;
end;

Stimmt. Luckie's Version ist eindeutig schneller.

Luckie 3. Jan 2005 09:59

Re: TFileStream: Textdatei auslesen
 
Und noch was: Verknüpf die Flags besser mit or anstatt mir einem +. Das ist eine logische oder Verknüpfung, keine Addition.

Pseudemys Nelsoni 3. Jan 2005 10:29

Re: TFileStream: Textdatei auslesen
 
so hab alles übernommen, danke luckie.

Noch eine Frage: sollte ich nicht lieber eine while schleife statt repeat nehmen?
Ich meine ich muss doch bevor ich mit dem buffer arbeite prüfen ob auch wirklich 15 zeichen eingelesen wurden oder?

Luckie 3. Jan 2005 11:05

Re: TFileStream: Textdatei auslesen
 
Hm. :gruebel: Wie willst du denn bei einer while-Schleife BytesRead initialisieren? Ich würde es so lassen und einfach nur vor dem Verarbeiten gucken, ob genug im Buffer steht mit lstrlen.

Pseudemys Nelsoni 3. Jan 2005 11:24

Re: TFileStream: Textdatei auslesen
 
moin luckie,

wenn du das sagst dann werd ichs auch so lassen ;)

ich dachte dabei nur an:

Delphi-Quellcode:
while Fs.Read(..., ...) = 15 do...
somit würde ich ja direkt prüfen ob ich die richtige länge erhalten haben bevor ich den inhalt der schleife ausführe und die variable BytesRead bräuchte ich nichtmehr, oder?

Luckie 3. Jan 2005 11:27

Re: TFileStream: Textdatei auslesen
 
Das wäre natürlich auch eine Möglichkeit.

Pseudemys Nelsoni 3. Jan 2005 11:46

Re: TFileStream: Textdatei auslesen
 
besten dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.

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