Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Record in Datei speichern (https://www.delphipraxis.net/172223-record-datei-speichern.html)

EMS 19. Dez 2012 12:38

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.

Bummi 19. Dez 2012 12:42

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

EMS 19. Dez 2012 12:49

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?

DeddyH 19. Dez 2012 12:54

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.

Medium 19. Dez 2012 12:55

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?)

EMS 19. Dez 2012 13:06

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.

DeddyH 19. Dez 2012 13:08

AW: Record in Datei speichern
 
Vermutlich, weil Du eine eigene Prozedur "ZieleErfassen" schreiben sollst, die die übergebene Liste befüllen soll.

Bjoerk 19. Dez 2012 13:16

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;

EMS 19. Dez 2012 13:19

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?

Volker Z. 19. Dez 2012 13:40

AW: Record in Datei speichern
 
Versuch mal folgendes

Delphi-Quellcode:
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;
Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.
Seite 1 von 4  1 23     Letzte »    

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