Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typorisierte Datei wird nicht gelesen (https://www.delphipraxis.net/72833-typorisierte-datei-wird-nicht-gelesen.html)

arbu man 7. Jul 2006 18:22

Re: Typorisierte Datei wird nicht gelesen
 
Hab das ganze so veränder das der array als var übergeben wird:
Delphi-Quellcode:
procedure FunktionenLesen(FileName: String; var f :TFunktionenArray);
var
  Datei: TFunktionenDatei;
  i, count: integer;
begin
  AssignFile(Datei, FileName);   // Datei zuweisen
  Reset(Datei);                  // Datei öffnen
  count:= FileSize(Datei) div sizeof(TFunktion);
  setlength(f, count);
  for i:=0 to count -1 do begin
    Seek(Datei, i);              // Datensatzzeiger an gewünschte Position
                                  // bewegen
    Read(Datei, f[i]);      // die aktuellen Werte lesen
  end;
  CloseFile(Datei);              // Datei schließen
end;
[OT]
Ne ich meinte recordierte Dateien :)
[/OT]

marabu 7. Jul 2006 18:27

Re: Typorisierte Datei wird nicht gelesen
 
Hi.

FileSize liefert die Anzahl der Datensätze, die integer division durch RecordSize (relative große Zahl) ergibt 0 als Count ...

Grüße vom marabu

Klaus01 7. Jul 2006 18:29

Re: Typorisierte Datei wird nicht gelesen
 
Delphi-Quellcode:
procedure FunktionenLesen(FileName: String; var f :TFunktionenArray);
var
  Datei: TFunktionenDatei;
  i, count: integer;
begin
  AssignFile(Datei, FileName);   // Datei zuweisen
  Reset(Datei);                  // Datei öffnen
  count:= FileSize(Datei);
  setlength(f, count);
  for i:=0 to count -1 do begin
    Read(Datei, f[i]);      // die aktuellen Werte lesen
  end;
  CloseFile(Datei);              // Datei schließen
end;
Nachgeschoben noch einige Erklärungen:

seek(datei,i) brauch man nur wenn man sich frei in der Datei bewegen will.
Du wolltest die Datei von vorne bis hinten lesen.
Mit reset hast Du Dich bereits an den Dateianfang bewegt.
Ein read bewegt Dich immer einen einen Datensatz weiter.

FileSize liefert bei einer typisierten Datei die Anzahl der Datensätze und
nicht die Größe der Datei in Bytes.

Grüße
Klaus

arbu man 7. Jul 2006 18:31

Re: Typorisierte Datei wird nicht gelesen
 
Das war es := Danke :D

Hawkeye219 8. Jul 2006 01:16

Re: Typorisierte Datei wird nicht gelesen
 
Wenn die Datei ganz gelesen werden soll, dann geht das auch so:

Delphi-Quellcode:
procedure FunktionenLesen (const FileName: String; var f: TFunktionenArray);
begin
  with TFileStream.Create(FileName, fmOpenRead) do
    begin
      SetLength (f, Size div SizeOf(f[0]));
      if (Size > 0) then
        Read (f[0], Size);
      Free;
    end;
end;
Gruß Hawkeye

Muetze1 8. Jul 2006 13:06

Re: Typorisierte Datei wird nicht gelesen
 
Gar kein Resourcen-Schutzblock um bei einem Lesefehler immernoch die Datei zu schliessen bzw. den FileStream freizugeben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.
Seite 2 von 2     12   

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