Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigener Typ + TIniFile = Fehler???? (https://www.delphipraxis.net/39111-eigener-typ-tinifile-%3D-fehler.html)

glkgereon 28. Jan 2005 20:21


Eigener Typ + TIniFile = Fehler????
 
also, ich versuche einen eigenen typ in eine inifile zu speichern

aber irgendwie is das resultat "anders als gewünscht"... :evil:

erst mal was code:

der typ bzw die typen
Delphi-Quellcode:
  TEuroMuenze = record
    Vorhanden: Boolean;
    Wert: Integer;
    Kommentar: String;
  end;
  TEuroLand = record
    Name: String;
    Abk: String;
    Muenzen: array of TEuroMuenze;
    MuenzenCount: Integer;
  end;
  TProfil = record
    Land: array of TEuroLand;
    LandCount: Integer;
    IsChanged: Boolean;
  end;
konstanten
Delphi-Quellcode:
const
  STD_LAND = 12;   //Länder
  STD_MUENZEN = 8; //Münzen
  STD_WERTE: array [1..STD_MUENZEN] of Integer = (1, 2, 5, 10, 20, 50, 100, 200);
  STD_ABK: array[1..STD_LAND] of String = (
                'A','B','D','E','F','FIN','GR','I','IRL','L','NL','P');
  STD_LAENDER: array[1..STD_LAND] of String = (
                'Österreich','Belgien','Deutschland','Spanien','Frankreich','Finnland',
                'Griechenland','Italien','Irland','Luxemburg','Niederlande','Portugal');

var
  Form1: TForm1;
  AktProfil: TProfil;
erzeugen
Delphi-Quellcode:
procedure TForm1.NeuesProfil1Click(Sender: TObject);
var i,j:Integer;
begin
  if AktProfil.IsChanged then
    begin
    ProfilSpeichern1Click(Form1);
    SetLength(AktProfil.Land,STD_LAND);
    AktProfil.LandCount:=STD_LAND;
    for i:=1 to STD_LAND do
      begin
      SetLength(AktProfil.Land[i].Muenzen,STD_MUENZEN);
      AktProfil.Land[i].Name:=STD_LAENDER[i];
      AktProfil.Land[i].Abk:=STD_ABK[i];
    for j:=1 to STD_MUENZEN do
        begin
        AktProfil.Land[i].Muenzen[j].Kommentar:='';
        AktProfil.Land[i].Muenzen[j].Wert:=STD_WERTE[j];
        AktProfil.Land[i].Muenzen[j].Vorhanden:=False;
        AktProfil.Land[i].MuenzenCount:=STD_MUENZEN;
        end;
      end;
    end;
end;
uns speichern
Delphi-Quellcode:
procedure TForm1.SaveProfil(FileName: TFileName);
var SaveFile: TIniFile;
    temp:TStrings;
    i, j:Integer;
begin
  //Leeren
  SaveFile:=TIniFile.Create(FileName);
  temp:=TStrings.Create;
  try
    //Speichern
    SaveFile.WriteInteger('Profil','Laender',AktProfil.LandCount);
    SaveFile.WriteBool('Profil','Laender',AktProfil.IsChanged);
    ShowMessage(IntToStr(AktProfil.LandCount));
    for i:=1 to AktProfil.LandCount do
      begin
      ShowMessage(IntToStr(i));
      SaveFile.WriteString('Land'+IntToStr(i),'Name',AktProfil.Land[i].Name);
      SaveFile.WriteString('Land'+IntToStr(i),'Abk',AktProfil.Land[i].Abk);
      SaveFile.WriteInteger('Land'+IntToStr(i),'Muenzen',AktProfil.Land[i].MuenzenCount);
      for j:=1 to AktProfil.Land[i].MuenzenCount do
        begin
        SaveFile.WriteBool('Land'+IntToStr(i),'ExMuenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Vorhanden);
        SaveFile.WriteInteger('Land'+IntToStr(i),'ValMuenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Wert);
        SaveFile.WriteString('Land'+IntToStr(i),'Muenze'+IntToStr(j),AktProfil.Land[i].Muenzen[j].Kommentar);
        end;
      end;
  finally
    Temp.Free;
    SaveFile.Free;
  end;
end;
aber warum zum teufel ist die inifile danach nur mit der profil-section gefüllt???
ich habe die variable erzeugt und befüllt, aber die inifile bleibt vergleichsweise gefüllt.
warum?
LandCount ist 0, dabei sage ich AktProfil.LandCount:=STD_LAND;
was soll das?? was mache ich falsch???

(ich hoffe ich erschlag euch mit dem code nicht.. :) )

CalganX 28. Jan 2005 21:38

Re: Eigener Typ + TIniFile = Fehler????
 
Hi,
ich habe mir deinen Source nicht genau angesehen, aber ich Frage mich ernsthaft, warum du Ini-Dateien verwenden willst.
Stichwort Delphi-Referenz durchsuchenTypisierte Dateien. Damit kannst du wesentlich besser und vorallem einfacher Daten in Dateien schreiben bzw. aus Dateien lesen. Wenn ich mir deinen SourceCode ansehe ist der ziemlich voll und ziemlich umständlich geschrieben.
Wenn du typisierte Dateien verwendest, verwendest du nur die Funktionen [oh]AssignFile, CloseFile[/oh] und Write(ln) bzw. Read(ln).

Schau es dir zumindest an. Ansonsten kann ich nur Streams empfehlen, fast genauso einfach und sogar mit höhere Funktionalität/Kompatibilität. ;)

Chris

glkgereon 28. Jan 2005 21:52

Re: Eigener Typ + TIniFile = Fehler????
 
es ging bei dem projekt eher darum, ein wenig den umgang mit inis zu üben *ggg*

Robert_G 28. Jan 2005 23:54

Re: Eigener Typ + TIniFile = Fehler????
 
Zitat:

Zitat von glkgereon
es ging bei dem projekt eher darum, ein wenig den umgang mit inis zu üben *ggg*

Übe lieber den Umgang mit XML. INI ist tot. :mrgreen: Es gibt in .Net nichtmal mehr eine Basisklasse um mit INIs umzugehen. ;)

glkgereon 29. Jan 2005 09:51

Re: Eigener Typ + TIniFile = Fehler????
 
dann halt nicht :evil:

was kann ich denn für xml nutzen?
wie sähe mein code in etwa für xml aus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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