![]() |
AW: Record in Datei speichern
So die Procedure geht jetzt da passte die end nicht ganz
So jetzt geht aber das nicht mit dem Button? Ich hab das Gefühl das da eine Variable unter button1 fehlt? Oder was mach ich jetzt wieder falsch? Fehler sind: unit1.pas(81,3) Error: Wrong number of parameters specified for call to "ZieleErfassen" unit1.pas(49,11) Hint: Found declaration: ZieleErfassen(var TZielListe); unit1.pas(85) Fatal: There were 1 errors compiling module, stopping
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 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; ZieleErfassen(ZielListe); Assign(Zielfile, 'C:\Users\Desktop\adress.dat'); Rewrite(Zielfile); with ZielListe do for I := 1 to ZielZahl do begin write(ZielFile, Ziele[I]); Close(ZielFile); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ZieleErfassen; end; end. |
AW: Record in Datei speichern
Zitat:
Zitat:
Delphi-Quellcode:
ZieleErfassen (ZielListe);
Dann wird die procedure ZieleErfassen in der procedure selbst nochmals aufgerufen, was dann zu einem Stackowerflow führen wird. Und Du solltest noch das CloseFile(); aus der for-Schleifen nehmen! Gruß |
AW: Record in Datei speichern
So der Compiler läuft jetzt durch
Beim klicken des Buttons kommt nun ein Fenster Projekt projekt1 hat Exception-Klasse>>External: SIGSEGV<< ausgelöst. In Datei'unit1.pas' in Zeile 50: begin Das ist nach der procedure Zieleerfassen
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 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; ZieleErfassen(ZielListe); Assign(Zielfile, 'C:\Users\Desktop\adress.dat'); Rewrite(Zielfile); with ZielListe do for I := 1 to ZielZahl do begin write(ZielFile, Ziele[I]); end; Close(ZielFile); end; procedure TForm1.Button1Click(Sender: TObject); var Zielliste:TZielliste; begin ZieleErfassen(Zielliste); end; end. |
AW: Record in Datei speichern
Zitat:
Gruß |
AW: Record in Datei speichern
Du produzierst eine Stackoverflow. Schmeiß das ZieleErfassen(ZielListe) in ZieleErfassen raus. Und die überflüssigen Variablen gleich mit. :-D Und das with auch, wurde dir schon gesagt, ist schlechter Stil.
|
AW: Record in Datei speichern
Habe ich vorhin noch übersehen: Der zweite with-Block kann mit "ZielListe" nichts anfangen, wenn dann muss es schon
Delphi-Quellcode:
heißen.
[B]with[/B] Liste [B]do[/B]
Gruß |
AW: Record in Datei speichern
ah sehr gut danke euch
jetzt geht es. Mhh jetzt sieht die Datei aber so aus: DresdenðÊÙ4ê†àÙ0è 0@Berlin*Š X:Ýìé €E@AachenÔ:Ý „ê `c@ ist das richtig? müsste das nicht Dresden 16.00 Berlin 43.00 Aachen 155.00 aussehen? was muss ich denn machen damit das wieder so wird? |
AW: Record in Datei speichern
Wieso wirfst Du das with nicht raus? Wie Du siehst, stiftet es nur Verwirrung. Aber AssignFile und CloseFile sehe ich ja auch noch nicht, was soll's also :?
|
AW: Record in Datei speichern
ich weiß nicht genau welche with du meinst?
Das mit dem Assignfile, closefile habe ich gerade geändert |
AW: Record in Datei speichern
Na, alle with.
Delphi-Quellcode:
So siehst Du doch gleich, was passiert und musst nicht überlegen, in welchem with Du gerade bist.
procedure ZieleErfassen(var Liste: TZielListe);
begin Liste.Ziele[1].Ort:='Dresden'; Liste.Ziele[1].Preis:=16.00; Liste.Ziele[2].Ort := 'Berlin'; Liste.Ziele[2].Preis := 43.00; Liste.Ziele[3].Ort :='Aachen'; Liste.Ziele[3].Preis := 155.00; ZielZahl := 3; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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-2025 by Thomas Breitkreuz