Entwickler-Ecke

Dateizugriff - Übergeben von Dateien an eine Prozedur


k.kuh - So 22.01.06 18:48
Titel: Übergeben von Dateien an eine Prozedur
Hi! seit fast 2 Jahren hat mir dieses Forum immer sehr geholfen, wenn ich mit Delphi mal nicht weiter wusste. Nun denke ich, habe ich genug erfahrung gesammelt, um mich auch einmal an diese tolle community zu wenden, ohne eure zeit sinnlos zu vergeuden.

Zu meinem Problem:

ich wuerde gerne verschiedene files mit jeweils identischer Datenstruktur mit jeweils nur einer prozedur iniziallisieren, daraus lesen, darin speichern und eintraege daraus loeschen. Dazu moechte ich die global deklarierte variable fuer die datei an die Prozedur übergeben.
Delphi moechte aber nun nicht, dass ich wie volgt vorgehe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Procedure TForm1.Inizialisieren(var X: file of recordtemp);
begin
  assignFile(X,URL + 'KN.dat');
  if not fileexists(URL + 'KN.dat')then
    rewrite(X);
  reset(X);
  closefile(X);
end;


Beim kompilieren erwartet delphi in der prozedurendeklaration eine geschlossene Klammer hinter
Zitat:
file
von


Delphi-Quelltext
1:
    Procedure Inizialisieren(var X: file of recordtemp);                    


so kann ich ja aber nicht angeben, um welche dateistruktur es sich handelt!

Ich wende mich nun also voller Hoffnung an euch, die ihr mir alle noch sooo viel voraus habt!

[edit] habe gerade festgestellt, dass dieses thema wohl eher in den bereich "Dateizugriff" gehoert, wie verschiebe ich meinen Beitrag?[/edit]


Moderiert von user profile iconUGrohne: Topic aus Datenbanken verschoben am Mo 23.01.2006 um 21:22


Lemmy - Mo 23.01.06 15:35

Hi,

Delphi erwartet als Parameter einfache Typen, d.h. Du musst lediglich einen Typ deklarieren, dann sollte es gehen:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type DateiTyp=file of recordtemp;

procedure Inizialisieren(var X:DateiTyp);
begin

end;



Grüße
Lemmy


k.kuh - Mo 23.01.06 20:30

Vielen, vielen Dank! Das Problem hat mich Tage lang beschaeftigt und ich wusste einfach nicht, wonach ich suchen sollte.


alzaimar - Mo 23.01.06 21:17

Noch eine kleine Idee: Entwickle deine Prozedur für einen TStream, dann ist das erstens zeitgemäßer und zweitens etwas allgemeingültiger.


F34r0fTh3D4rk - Mo 23.01.06 21:35

das ist das gleiche problem wie mit den arrays, ich finds auch nicht gut, aber was soll man machen ;)


k.kuh - Mo 23.01.06 22:07

Also mit TStreams habe ich mich noch nicht beschaeftigt.... :oops:
Dann werde ich mich da mal reinlesen....
Eine frage haett ich dann aber doch noch:
Ist es moeglich, mehrere Typenbeschreibungen anzugeben? Soll heissen geht etwas in der art:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type 
  DateiTyp=file of recordtemp;  
  DateiTyp2=file of recordtemp2;  

 
procedure Inizialisieren(var X: DateiTyp or DateiTyp2);  
begin  

 
end;


Sehr primitiv dargestellt, ich weiss, aber ich wusste nicht, wie ich es sonst verstaendlich ausdruecken haette koennen.

Danke schoneinmal im vorraus!


F34r0fTh3D4rk - Mo 23.01.06 22:13

user profile iconk.kuh hat folgendes geschrieben:
Also mit TStreams habe ich mich noch nicht beschaeftigt.... :oops:
Dann werde ich mich da mal reinlesen....
Eine frage haett ich dann aber doch noch:
Ist es moeglich, mehrere Typenbeschreibungen anzugeben? Soll heissen geht etwas in der art:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type 
  DateiTyp=file of recordtemp;  
  DateiTyp2=file of recordtemp2;  

 
procedure Inizialisieren(var X: DateiTyp or DateiTyp2);  
begin  

 
end;


Sehr primitiv dargestellt, ich weiss, aber ich wusste nicht, wie ich es sonst verstaendlich ausdruecken haette koennen.

Danke schoneinmal im vorraus!

machst du einfach ne weitere ableitung, oder du überschreibst.


0xCC - Mo 23.01.06 22:24

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
machst du einfach ne weitere ableitung, oder du überschreibst.

soll wohl heissen dass du mal nach overload in der delphi-hilfe schaust
ansonsten hilft vielleicht sowas:

Delphi-Quelltext
1:
2:
3:
4:
procedure Inizialisieren(var X: DateiTyp = nilvar Y: DateiTyp2 = nil);
begin
  if x <> nil then
  else

so brauchst du keinen der parameter zwingend zu übergeben.


k.kuh - Mo 23.01.06 22:27

Ah! sehr gut! das zweite hab ich verstanden. Nun such ich mal nach overload! Danke!!!!