Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - 'file of' Deklaration klappt nicht


cumberdale - Sa 06.06.09 19:15
Titel: 'file of' Deklaration klappt nicht
Hallo, ich hoffe ich bin hier richtig ;)

Hab nach gut 2 Jahren wieder meine alten Delphi Dateien rausgekramt, die wir in der Schule mal gemacht haben. Wir hatten damals delphi 2005 (oder schon 2007?) und mein Turbo Delphi hat anscheinend Probleme mit ein paar Befehlen.
Also die Datei sollte einen Text, den man in ein editfeld schreibt speichern und anschließend manuell abgerufen werden können.
Das ganze sieht dann so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
var
  Form2: TForm2;
implementation

{$R *.nfm}

    (***********************************)


   type  tinfo = integer;
         tdat = file of tinfo;

   var   dat : tdat;

     (**********************************)


   procedure speichern (var info:tinfo);
   begin
     assignfile(dat,'Liste.dat');
     reset(dat);
     write(dat,info);
     closefile(dat);
   end;

     procedure laden (var info:tinfo);
   begin
     assignfile(dat,'Liste.dat');
     reset(dat);
     read(dat,info);
     closefile(dat);
   end;

   procedure speichern_klick;
   var info : tinfo;
   begin
      info := strtoint(form2.edit3.text);
      speichern(info);
   end;

   procedure laden_klick;
   var info : tinfo;
   begin
      laden(info);
      form2.label1.caption := inttostr(info);
   end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 speichern_klick;
end;

end.
(die anderen edit felder & buttons hab ich mal rausgelassen, da irrelevant. zudem gibts noch keinen button zum laden)

Jedoch kommt, wenn ich das Programm starten möchte, eine Fehlermeldung bei der Deklaration "tdat = file of tinfo;":
[Pascal Fehler] Unit2.pas(34): E1025 Sprach-Feature wird nicht unterstützt: 'typisierte oder untypisierte Datei'

Hab ich einen Fehler gemacht oder liegt das an Turbo Delphi? Wenn ja wie kann ich das Problem umgehen?


BenBE - Sa 06.06.09 19:35

Würde das spontan mal auf TurboDelphi schieben, weil das syntaktisch korrekt ist, wenn auch extrem veraltet. Schau Dir lieber einmal die Klasse TStream und ihre Nachfahren an. Interessant ist hier z.B. die Klasse TStringStream sowie TFileStream.


Marc. - Sa 06.06.09 19:38

Laut einem Beitrag [http://www.delphipraxis.net/post633917.html#633917] in der DP lässt sich das Problem mit einem Simplen Et-Zeichen (&) vor File lösen.

Delphi-Quelltext
1:
&File of ...                    

Ob das wirklich funktioniert, musst Du nun testen. :nixweiss:


cumberdale - Sa 06.06.09 19:44

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Laut einem Beitrag [http://www.delphipraxis.net/post633917.html#633917] in der DP lässt sich das Problem mit einem Simplen Et-Zeichen (&) vor File lösen.

Delphi-Quelltext
1:
&File of ...                    

Ob das wirklich funktioniert, musst Du nun testen. :nixweiss:
mmh, klappt leider auch nicht :(
Zitat:
Schau Dir lieber einmal die Klasse TStream und ihre Nachfahren an. Interessant ist hier z.B. die Klasse TStringStream sowie TFileStream.
ok danke, werd ich machen. Ich denke mal, dass es so veraltet ist, liegt hauptsächlich an unseren ehemaligen Informatiklehrer :p


Marc. - Sa 06.06.09 19:58

user profile iconcumberdale hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Ob das wirklich funktioniert, musst Du nun testen. :nixweiss:
mmh, klappt leider auch nicht :(

Seh gerade, das bezog sich auf Delphi .NET (was es schon gar nicht mehr gibt). :oops:


ffgorcky - Sa 06.06.09 20:26

Also ich sehe gerade, dass Du die Variable dat an der falschen Stelle deklariert hast:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  end;
var
  Form2: TForm2;
implementation

{$R *.nfm}

    (***********************************)


   type  tinfo = integer;
         tdat = file of tinfo;

   var   dat : tdat;

     (**********************************)

die müsstest Du doch einfach direkt unter Deine Form2-Definition setzen!
- Und dann brauchst Du da auch kein var mehr extra vorschreiben!


BenBE - Sa 06.06.09 20:31

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Also ich sehe gerade, dass Du die Variable dat an der falschen Stelle deklariert hast:

[...]

die müsstest Du doch einfach direkt unter Deine Form2-Definition setzen!
- Und dann brauchst Du da auch kein var mehr extra vorschreiben!


Falsch! Die ist dort total korrekt, da sie im Interface-Teil global sichtbar ist, unterhalb von Implementation jedoch nur für die eigene Unit. Von daher ist das so schon durchaus korrekt und gegenüber der von Dir vorgeschlagenen Version sogar vorzuziehen (wenn man es schon unbedingt mit globalen Variablen machen möchte).