AGB  ·  Datenschutz  ·  Impressum  







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

Eigener Typ + TIniFile = Fehler????

Ein Thema von glkgereon · begonnen am 28. Jan 2005 · letzter Beitrag vom 29. Jan 2005
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Eigener Typ + TIniFile = Fehler????

  Alt 28. Jan 2005, 21:21
also, ich versuche einen eigenen typ in eine inifile zu speichern

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

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.. )
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 28. Jan 2005, 22:38
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
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

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

  Alt 28. Jan 2005, 22:52
es ging bei dem projekt eher darum, ein wenig den umgang mit inis zu üben *ggg*
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

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

  Alt 29. Jan 2005, 00:54
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. Es gibt in .Net nichtmal mehr eine Basisklasse um mit INIs umzugehen.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

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

  Alt 29. Jan 2005, 10:51
dann halt nicht

was kann ich denn für xml nutzen?
wie sähe mein code in etwa für xml aus?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:08 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