![]() |
Record in Datei speichern
Hallo
Ich habe folgendes Problem. Möchte gerne diese Programm zum laufen bekommen. Es soll eine Datei erstelle wo die Daten aufgelistet sind. Irgendwo ist hier aber wieder ein Fehler. Er bleibt immer beim TZielFile = file of TZiel; stehen Das ganze soll auf drücken eines Buttons geschehen. Den habe ich ZielErfassen als Name gegeben
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; type { TForm1 } TForm1 = class(TForm) procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; type TZiel = record Ort: String; Preis: real; end; type TZielliste = record Ziele: array[1..100] of TZiel; ZielZahl: integer; end; TZielFile = File of TZiel; var Form1: TForm1; ZielListe: TZielliste; Zielfile: TZielFile; I: integer; implementation {$R *.lfm} { TForm1 } procedure ZieleErfassen(var Liste: TZielListe); begin with Liste do begin Ziele[1].Ort:='Dresden'; Ziele[1].Preis:=16.00; with Ziele[2] do begin Ort := 'Berlin'; Preis := 43.00; end; with Ziele[3] do begin Ort :='Aachen'; Preis := 155.00; end; ZielZahl :=3; end; end; ZieleErfassen(ZielListe); Assign(Zielfile, 'C:\Users\Notebook\Desktop\ziele.dat'); Rewrite(Zielfile); with ZielListe do for I := 1 to ZielZahl do write(ZielFile, Ziele[I]); Close(ZielFile); end; end. |
AW: Record in Datei speichern
Ort als String kann hierfür nicht verwendet werden, da die Länge nicht fix ist
Ort: String[100] z.B. ginge |
AW: Record in Datei speichern
Hallo
Ja das hat jetzt schon weiter geholfen. Mir ist aber geradea aufgefallen das mein Button gar nicht im Namen geändert ist da gibts immer nen Fehler... Jetzt bin ich wieder ratlos? was muss ich denn machen damit das halt einfach auf Knopfdruck das jetzt speichert? |
AW: Record in Datei speichern
Einmal "type" genügt, solange keine andere Deklaration dazwischen erfolgt. Die Laufvariable I muss eine lokale Variable sein, und ändere mal Assign in AssignFile und Close in CloseFile. Außerdem hast Du wohl 2 "end" zuviel, rück mal korrekt ein, dann siehst Du auch, wo.
|
AW: Record in Datei speichern
Ich sehe keinen Button auf dem Formular. Damit sollte man am besten anfangen ;) (Obwohl du einen Event-Handler für einen ButtonClick da stehen hast. Das schaut seltsam aus. Hast du das von Hand da hin geschrieben?)
|
AW: Record in Datei speichern
So hab nen paar Sachen geändert
Jetzt hab ich ein Problem mit Listen? Ich hab das auch noch nicht so verstanden wieso bei der procedure in der Vorgabe das mit (var Liste: TZielListe); drinne steht?
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; TZiel = record Ort:String[20]; Preis: real; end; TZielListe = record Ziele: array[1..100] of TZiel; ZielZahl: integer; end; TZielFile = file of TZiel; var Form1: TForm1; ZielListe: TZielListe; ZielFile: TZielFile; I: Integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); //procedure ZieleErfassen(var Liste: TZielListe); begin with Liste do begin Ziele[1].Ort:='Dresden'; Ziele[1].Preis:=16.00; end; with Ziele[2] do begin Ort := 'Berlin'; Preis := 43.00; end; with Ziele[3] do begin Ort :='Aachen'; Preis := 155.00; end; ZielZahl :=3; ZieleErfassen(ZielListe); Assign(Zielfile, 'C:\Notebook\Desktop\ziele.dat'); Rewrite(Zielfile); with ZielListe do for I := 1 to ZielZahl do begin write(ZielFile, Ziele[I]); Close(ZielFile); end; end; end. |
AW: Record in Datei speichern
Vermutlich, weil Du eine eigene Prozedur "ZieleErfassen" schreiben sollst, die die übergebene Liste befüllen soll.
|
AW: Record in Datei speichern
Delphi-Quellcode:
procedure ChangeValue(var Value: integer);
begin Value := 10; end; procedure NotChangeValue(Value: integer); begin Value := 10; end; procedure TForm1.Button2Click(Sender: TObject); var I: integer; begin I:= 1; NotChangeValue(I); ShowMessage(IntToStr(I)); ChangeValue(I); ShowMessage(IntToStr(I)); end; |
AW: Record in Datei speichern
ah genau das hab ich gerade verstanden was mit dieser Procedur da gemeint ist.
Aber die Procedur an sich geht schon nicht. Da kommen Fehler: Identifier not found "Ziele" Expression type must be class or record type ... ... Fehlt da irgendwie noch eine deklaration? |
AW: Record in Datei speichern
Versuch mal folgendes
Delphi-Quellcode:
Gruß
procedure TForm1.Button1Click(Sender: TObject);
begin with ZielListe do begin with Ziele[1] do begin Ort:='Dresden'; Preis:=16.00; end; with Ziele[2] do begin Ort := 'Berlin'; Preis := 43.00; end; with Ziele[3] do begin Ort :='Aachen'; Preis := 155.00; end; ZielZahl :=3; end; Assign(Zielfile, 'C:\Notebook\Desktop\ziele.dat'); Rewrite(Zielfile); with ZielListe do for I := 1 to ZielZahl do write(ZielFile, Ziele[I]); Close(ZielFile); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz