Entwickler-Ecke

Dateizugriff - File of record


Dr. Confusius - Do 20.03.03 16:08
Titel: File of record
Ich bin ziemlicher Anfänger, deshalb ist für euch die Lösung wahrscheinlich relativ einfach.

Ich möchte gerne eine Datei laden, die aus von mir erstellten Records besteht. Dazu habe ich zu beginn meiner Prozedur folgendes definiert:


Quelltext
1:
2:
var
Termindatei : file of TPlaner;


Wobei ich zuvor TPlaner wie folgt definiert habe:


Quelltext
1:
2:
3:
4:
5:
type
  TPlaner =record
          Termine : array[1..max] of TTermin;
          AnzTermine : integer;
          end;


Bevor ich die Variable Termindatei definiert habe, ist das Programm gelaufen - die Typendefinition TPlaner ist also fehlerfrei (hoffe ich).

Ich erhalte immer folgende Fehlermeldung:
Zitat:
[Fehler] Typ 'TPlaner' benötigt Finalization - nicht im Dateityp erlaubt

Was hat das zu bedeuten?


Klabautermann - Do 20.03.03 16:36

Hallo,

wie sieht den tTermin aus?

Generell aber Datentypen die in eine Datei gespeichert werden sollen imme als Packed definieren:

Quelltext
1:
2:
3:
4:
TPlaner = packed record 
     Termine : array[1..max] of TTermin; 
     AnzTermine : integer; 
     end;


Gruß
Klabautermann


Dr. Confusius - Do 20.03.03 17:10

Meine Typen sehen wie folgt aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TZeitpunkt = packed record
     Datum : TDate;
     Zeit     : TTime;
     end;

  TTermin = packed record
     ZP, AlarmZP, WEnde, TEnd : TZeitpunkt;
     Widerholung : integer;
     Bezeichnung, Kom : String;
     Klonfl : boolean;
     end;

  TPlaner = packed record
          Termine       : array[1..max] of TTermin;
          AnzTermine : integer;
          end;


packed record hat da leider nicht geholfen.


Aya - Do 20.03.03 17:15

Hi,

ich würde mal tippen das es an dem Array liegt den du da benutzt... :)

1.) Versuch mal den Auszukommentieren, ob es dann geht... (dann wissen wir ob es an ihm liegt ;) )

2.) Wenn ja, dann schreib mal anstelle von Max eine feste zahl rein, denn es gibt oft/immer probleme wenn man auf die Art wie du es machen willst einen Dynamischen Array speichern will.. leider :(

Wenn es dann dennoch nich geht, mußt du wohl jedes ArrayFeld von hand in die Datei schreiben... ;) Also einfach mit ner ForSchleife immer ein Feld nach dem anderen reinpacken.

Au'revoir,
Aya~


Klabautermann - Do 20.03.03 17:20

Hallo,
Dr. Confusius hat folgendes geschrieben:

Quelltext
1:
     Bezeichnung, Kom : String;                    

das ist der Fehler.

Du musst die länge der Strings festlegen, da Delphi sonst nicht wissen kann, wie groß die Blöcke sind, die es in die Datei schreiben muss.
Aso mache ein

Quelltext
1:
     Bezeichnung, Kom : String[200];                    

oder ähnliches draus.
Desweiteren solltest du bei allen Records das Packed angeben, damit die Blöcke 1. möglichst klein sind und 2. dein Programm auch dann noch seine Dateien lesen kann, wenn du es mal mit einer anderen Delphi Version Kompilierst.

Gruß
Klabautermann


Dr. Confusius - Do 20.03.03 17:40

Das war es, :lol: vielen Dank für die Hilfe!

Ich fürchte nur, dass das nicht mein letztes Problem gewesen sein wird. :x


Klabautermann - Do 20.03.03 18:01

Hi,
Dr. Confusius hat folgendes geschrieben:
Ich fürchte nur, dass das nicht mein letztes Problem gewesen sein wird. :x

das währe ja auch langweilig ;). Aus Problemen lernt mensch, deshalb sollte man diese nicht so negativ sehen.

Gruß
Klabautermann

PS: Ein einfaches Demo zu Typisierten Datein kann hier [http://downloads.oitmann.de/samples] runtergeladen werden.


mimi - So 30.03.03 22:11

Problem gelöst ???


Dr. Confusius - Mo 31.03.03 08:10

Jo :lol: ,
Vielen Dank