Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
Seite 1 von 2  1 2      

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