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/)
-   -   Typisierte datei anlegen (https://www.delphipraxis.net/84944-typisierte-datei-anlegen.html)

efknarf 24. Jan 2007 20:50

Re: Typisierte datei anlegen
 
Huhu,

vielleicht hilft dir das weiter...

Delphi-Quellcode:
type
 TField = record
      x1,y1,x2,y2,x3,y3,x4,y4 : Integer;
      Name :String[4];
 end;

 TFieldFile = File of TField;

procedure DatenSchreiben(const FileName: TFileName);
var F: TFieldFile;
    Buff: TField;
begin
 AssignFile(F,FileName);
 Rewrite(F); //RecSize darf bei einer typisierten Datei nicht angegeben werden
 try
  while NochDatenVorhanden do begin //weitere Daten vorhanden? True! Weiter gehts!!
   Buff.X1:=HoleX1; //functionen, um Integerwerte zu holen
   Buff.X2:=HoleX2;
   Buff.X3:=HoleX3;
   //... usw. bis alle Daten initialisiert wurden
   write(F,Buff);
  end;
 finally
  CloseFile(F);
 end;
end;

procedure DatenLesen(const FileName: TFileName);
var F: TFieldFile;
    Buff: TField;
begin
 AssignFile(F,FileName);
 if FileExists(FileName) then begin //Testen, ob Datei vorhanden ist
  Reset(F);
  try
   while not EOF(F) do begin //Einlesen, bis Dateiende
    Read(F,Buff);
    TueDiesOderDas(Buff); //eingelesene Daten verarbeiten
   end;
  finally
   CloseFile(F);
  end;
end;
Gruß Frank

Christian Seehase 24. Jan 2007 21:00

Re: Typisierte datei anlegen
 
Moin Chemiker,

Zitat:

Zitat von Chemiker
Das stimmt, aber durch die Verwendung von packed wird der Zugriff auf die Daten verlangsamt.

Aber nur, falls das packed tatsächlich zu einer Änderung der Verteilung führt, allerdings ist es recht gefährlich das packed bei Records wegzulassen, die als Datensatz für eine Datei verwendet werden sollen, da man ansonsten ja auch den Inhalt der Lücken mit abspeichert.
Sollte man nicht daran denken, und das Alignment geändert haben, kann man die Daten u.U. dann auch kaum noch lesen. ;-)


Zitat:

Zitat von Chemiker
Das Auslesen der Werte will schuetzejanett über eine typisierten Datei durchführen, aber die Eingabe soll über einen Texteditor erfolgen.

Und in einem Texteditor werden die Zahlen als Zeichen abgespeichert.

Deshalb schrieb ich ja, dass man Werte < 32 kaum mit einem Texteditor wird eingeben können, ausser vielleicht, man bekommt das mit Unicode hingetrickst. Somit wäre, bei dem gegebenen Satzaufbau, schon die Stringlänge nicht eingebbar.

Mavarik 25. Jan 2007 08:14

Re: Typisierte datei anlegen
 
Zitat:

Zitat von Christian Seehase

Aber nur, falls das packed tatsächlich zu einer Änderung der Verteilung führt, allerdings ist es recht gefährlich das packed bei Records wegzulassen, die als Datensatz für eine Datei verwendet werden sollen, da man ansonsten ja auch den Inhalt der Lücken mit abspeichert.
Sollte man nicht daran denken, und das Alignment geändert haben, kann man die Daten u.U. dann auch kaum noch lesen. ;-)

Eben, daher einfach {$A1} angeben und weiterarbeiten...

Frank :coder:

Chemiker 25. Jan 2007 08:42

Re: Typisierte datei anlegen
 
Hallo,

Zitat:

Zitat von Mavarik
Eben, daher einfach {$A1} angeben und weiterarbeiten...

Die Angabe {$A1} ist fehlerhaft.

Richtig:

{$A-} ungepackten Record
{$A+} gepackten Record

Ich wollte aber keine Grundsatzdiskussion über packed oder unpacked in einem Record lostreten, sondern nur darauf hinweisen.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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