AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record in Datei speichern

Ein Thema von EMS · begonnen am 19. Dez 2012 · letzter Beitrag vom 1. Jan 2013
Antwort Antwort
Seite 2 von 4     12 34      
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#11

AW: Record in Datei speichern

  Alt 19. Dez 2012, 13:44
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.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#12

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:09
Zitat:
So die Procedure geht jetzt da passte die end nicht ganz
Da passt mehr noch nicht ganz.
Zitat:
unit1.pas(81,3) Error: Wrong number of parameters specified for call to "ZieleErfassen"
Du musst schon in TForm1.Button1Click den Parameter mitgeben: also
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ß
Volker Zeller
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#13

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:21
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.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#14

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:36
Zitat:
Projekt projekt1 hat Exception-Klasse>>External:
SIGSEGV<< ausgelöst.
Innerhalb der procedure ZieleErfassen steht noch immer der erneute Aufruf ZieleErfassen. Endlos-Rekusrsion und damit die Exception.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:38
Du produzierst eine Stackoverflow. Schmeiß das ZieleErfassen(ZielListe) in ZieleErfassen raus. Und die überflüssigen Variablen gleich mit. Und das with auch, wurde dir schon gesagt, ist schlechter Stil.

Geändert von Bjoerk (19. Dez 2012 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#16

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:41
Habe ich vorhin noch übersehen: Der zweite with-Block kann mit "ZielListe" nichts anfangen, wenn dann muss es schon
[B]with[/B] Liste [B]do[/B] heißen.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#17

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:52
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?

Geändert von EMS (19. Dez 2012 um 14:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:54
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#19

AW: Record in Datei speichern

  Alt 19. Dez 2012, 14:59
ich weiß nicht genau welche with du meinst?
Das mit dem Assignfile, closefile habe ich gerade geändert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Record in Datei speichern

  Alt 19. Dez 2012, 15:09
Na, alle with.
Delphi-Quellcode:
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;
So siehst Du doch gleich, was passiert und musst nicht überlegen, in welchem with Du gerade bist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz