Autor Beitrag
theTJ
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 19:24 
hallo,

kann mir jemand sagen wo beim auslesen der iniFile der Fehler ligt?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
uses
[...]
  inifiles;

type
  Tmain = class(TForm)
[...]
    procedure FormActivate(Sender: TObject);
[...]
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  main: Tmain;
  opt, lng: TIniFile;
  chosenlng, lngfname: String;
    {Game-VAR}
      {names:}
  PLo, PLt : String;
    {Protocoll-VAR}
  vs : ShortString;
    {Main-VAR}
  newgame, namepl1, namepl2, plo1, plt2 : ShortString;
    {Fight-VAR}
  pPL1, pPL2, pDIF : Integer;
  fightHL, fightML, fightDEF : ShortString;

implementation

{$R *.xfm}

procedure Tmain.FormActivate(Sender: TObject);
begin

  opt := TIniFile.Create('options.ini');
  try
    chosenlng := opt.ReadString('chosen','language','de.ini');
  finally
    opt.Free;
  lng := TIniFile.Create(chosenlng);
  try
  {Newgame InputBox}
  newgame   := lng.ReadString('Newgame InputBox','newgame','lesefehler');
  namepl1   := lng.ReadString('Newgame InputBox','namepl1','Name von Spieler1');
  namepl2   := lng.ReadString('Newgame InputBox','namepl2','Name von Spieler2');
  plo1      := lng.ReadString('Newgame InputBox','plo1','Spieler1');
  plt2      := lng.ReadString('Newgame InputBox','plt2','Spieler2');
  vs        := lng.ReadString('Newgame InputBox','vs',' gegen ');

  {Fight InputBox}
  fightHL   := lng.ReadString('Fight InputBox','fightHL','Monsterfight');
[...]
  finally
  lng.Free;
end;
end;
end;


ich bekomme nur den Default wert, der z.Zt. zwar noch dem ausgelesenem entspricht aber eigentlich nicht soll...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams


Zuletzt bearbeitet von theTJ am Sa 14.05.05 19:45, insgesamt 1-mal bearbeitet
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 19:40 
user profile icontheTJ hat folgendes geschrieben:
hallo,

gibt es eine möglichket den folgenden code zu verkürzen???

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  newgame   := lng.ReadString('Newgame InputBox','newgame','Neues Protokoll');
  namepl1   := lng.ReadString('Newgame InputBox','namepl1','Name von Spieler1');
  namepl2   := lng.ReadString('Newgame InputBox','namepl2','Name von Spieler2');
  plo1      := lng.ReadString('Newgame InputBox','plo1','Spieler1');
  plt2      := lng.ReadString('Newgame InputBox','plt2','Spieler2');
  vs        := lng.ReadString('Newgame InputBox','vs',' gegen ');


ich hab nämlich noch etwa dottpelt soviele auszulesen... würde auch auf das Default verzichten, wenn nötig...

anscheinend nicht muss ich doch alle "von hand" auslesen...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Sa 14.05.05 19:55 
Also kürzen kann man das nur, wenn man alles per Schleife in ein Array einliest und den Einträgen in der INI-Datei ziemlich
furchtbare Namen wie Eintrag1, Eintrag2 usw. verpasst. Aber wieso auch kürzen? Doppelt so viel sind doch immernoch weniger als 20 Zeilen.

Wenn du keine Sections brauchst, lassen sich INI-Dateien auch wunderbar mit TStringList einlesen. Hat aber eigentlich nichts mit deinem Problem zu tun, is nur einfacher.
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 19:58 
user profile iconMrFox hat folgendes geschrieben:
Also kürzen kann man das nur, wenn man alles per Schleife in ein Array einliest und den Einträgen in der INI-Datei ziemlich
furchtbare Namen wie Eintrag1, Eintrag2 usw. verpasst. Aber wieso auch kürzen? Doppelt so viel sind doch immernoch weniger als 20 Zeilen.

Wenn du keine Sections brauchst, lassen sich INI-Dateien auch wunderbar mit TStringList einlesen. Hat aber eigentlich nichts mit deinem Problem zu tun, is nur einfacher.


der Array wär ne Idee oder das ohne sections, aber ohne sections wir die ini zu unübersichtlich...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Sa 14.05.05 20:01 
Solange du TIniFile verwendest kannst du ja Sections auslesen, brauchst halt nur soviele Schleifen und Arrays wie Sections.
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 20:06 
is ja eigentlich klar :autsch: :autsch: :autsch: , aber wichtiger ist mir noch das ich beim auslesen nur das default bekomme...

user profile icontheTJ hat folgendes geschrieben:
hallo,

kann mir jemand sagen wo beim auslesen der iniFile der Fehler ligt?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
uses
[...]
  inifiles;

type
  Tmain = class(TForm)
[...]
    procedure FormActivate(Sender: TObject);
[...]
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  main: Tmain;
  opt, lng: TIniFile;
  chosenlng, lngfname: String;
    {Game-VAR}
      {names:}
  PLo, PLt : String;
    {Protocoll-VAR}
  vs : ShortString;
    {Main-VAR}
  newgame, namepl1, namepl2, plo1, plt2 : ShortString;
    {Fight-VAR}
  pPL1, pPL2, pDIF : Integer;
  fightHL, fightML, fightDEF : ShortString;

implementation

{$R *.xfm}

procedure Tmain.FormActivate(Sender: TObject);
begin

  opt := TIniFile.Create('options.ini');
  try
    chosenlng := opt.ReadString('chosen','language','de.ini');
  finally
    opt.Free;
  lng := TIniFile.Create(chosenlng);
  try
  {Newgame InputBox}
  newgame   := lng.ReadString('Newgame InputBox','newgame','lesefehler');
  namepl1   := lng.ReadString('Newgame InputBox','namepl1','Name von Spieler1');
  namepl2   := lng.ReadString('Newgame InputBox','namepl2','Name von Spieler2');
  plo1      := lng.ReadString('Newgame InputBox','plo1','Spieler1');
  plt2      := lng.ReadString('Newgame InputBox','plt2','Spieler2');
  vs        := lng.ReadString('Newgame InputBox','vs',' gegen ');

  {Fight InputBox}
  fightHL   := lng.ReadString('Fight InputBox','fightHL','Monsterfight');
[...]
  finally
  lng.Free;
end;
end;
end;


ich bekomme nur den Default wert, der z.Zt. zwar noch dem ausgelesenem entspricht aber eigentlich nicht soll...


bemerkt habe ich es ert als ich aus spaß mal an der markierten Stelle lesefehler eingegeben hab...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 20:19 
Einen Fehler hab ich grad selbst gefunden, ich habe nur ausgelesen welche Sprache gewählt ist, aber nicht wie die IniFile heißt. das hab ich behoben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure Tmain.FormActivate(Sender: TObject);
begin

  opt := TIniFile.Create('options.ini');
  try
    chosenlng := opt.ReadString('chosen','language','Deutsch');
    lngfname := opt.ReadString('installed',chosenlng,'de.ini');
  finally
    opt.Free;
  end;
  lng := TIniFile.Create(lngfname);
  try
  {Newgame InputBox}
  newgame   := lng.ReadString('Newgame InputBox','newgame','lesefehler');
  namepl1   := lng.ReadString('Newgame InputBox','namepl1','Name von Spieler1');
  namepl2   := lng.ReadString('Newgame InputBox','namepl2','Name von Spieler2');
  plo1      := lng.ReadString('Newgame InputBox','plo1','Spieler1');
  plt2      := lng.ReadString('Newgame InputBox','plt2','Spieler2');
  vs        := lng.ReadString('Newgame InputBox','vs',' gegen ');


doch ich bekomme an der Stelle wo die Variabele newgame eingesetzt werden soll immernoch lesefehler...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Sa 14.05.05 20:22 
In der Hilfe steht, dass wenn die bei Create angegebene Pfadangabe keine absolute ist, die Datei in C:\Windows bzw. C:\WINNT erstellt wird. Also nicht im aktuellen Arbeitsverzeichnis.
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 20:28 
user profile iconMrFox hat folgendes geschrieben:
In der Hilfe steht, dass wenn die bei Create angegebene Pfadangabe nicht keine absolute ist, die Datei in C:\Windows bzw. C:\WINNT erstellt wird. Also nicht im aktuellen Arbeitsverzeichnis.


son Müll... naja dann muss ich wohl ne möglichkeit finden, das ich die INIs in die C:\Windows schreibe oder beim Installieren den klmpletten Pfad abspeichere was dann wieder n Problem ist, da ich keine Ahnung im umgeng mit der Regestry hat... :nixweiss: das geht auch nicht, da ich das ganze ja auch Linuxkompatibelmachen will... :nixweiss:

THX

ich verspreche :flehan: das nächste malt ers wieder die DH zu befragen... ;)

theTJ

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: Sa 14.05.05 21:01 
Ich habe jezt einfach die IniFiles nach C:\Windows verschoben und so die richtigen ergebnisse... jetzt bleibt nur noch die Frage: "Was macht Linux mit der Anweisung?"

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: So 15.05.05 08:34 
Des mit dem Linux ist ne gute Frage, weiß ich auch nicht.

Ich habe aber herausgefunden wie man die Datei auch auslesen kann, wenn sie sich im aktuellen Arbeitsverzeichnis befindet:

GetCurrentDir gibt das Arbeitsverzeichn. als abolute Pfadangabe zurück...Dann müsste das halt ungefähr so aussehen...

ausblenden Delphi-Quelltext
1:
2:
lng: Tinifile;
lng := Tinifile.Create(GetCurrentDir+'\xxx.ini');


Ich habs ausprobiert, bei mir funzts.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: So 15.05.05 13:54 
user profile iconMrFox hat folgendes geschrieben:
Des mit dem Linux ist ne gute Frage, weiß ich auch nicht.

Ich habe aber herausgefunden wie man die Datei auch auslesen kann, wenn sie sich im aktuellen Arbeitsverzeichnis befindet:

GetCurrentDir gibt das Arbeitsverzeichn. als abolute Pfadangabe zurück...Dann müsste das halt ungefähr so aussehen...

ausblenden Delphi-Quelltext
1:
2:
lng: Tinifile;
lng := Tinifile.Create(GetCurrentDir+'\xxx.ini');


Ich habs ausprobiert, bei mir funzts.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


danke, ich werds dann auch mal testen! vielleicht funtzt das auch unter Linux...

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
theTJ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 43

WIN XP: SP1
D7 enterprise
BeitragVerfasst: So 15.05.05 15:55 
funktioniert nicht, hast du es mit einem CLX-Programm probiert???
ich habe es mit folgendem Code versucht
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Tmain.FormActivate(Sender: TObject);
begin

  opt := TIniFile.Create(GetCurrentDir + 'main.ini');
  try
  lngfname := opt.ReadString('sprache','sprache','nr.ini');
  finally
  opt.Free
  end;
  ShowMessage(lngfname);


und ich bekomme statt der in der INI eingestellten de.ini die default eingestellte nr.ini in der markierten Message.

einer möglichen Frage deiner seits vorwegenommen: ich habe mehrfach kontrolliert, das die inifiles im selben ordner wie die exe sind :!:

_________________
theTJ
"Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist 42, aber was ist die Frage genau?" aus "Per Anhalter durch die Galaxis" von Douglas Adams
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: So 15.05.05 19:43 
GetCurrentDir gibt z.B C:\Eigene Dateien\Programme zurück.

Mit deinem Code würde die Datei C:\Eigene Dateien\ProgrammeMain.ini geöffnet. :D

Verstanden wo der Fehler liegt?
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: Mi 18.05.05 11:11 
Hallo? Wenn du schon nicht mehr antwortest dann markiere den Thread bitte als gelöst. Danke

inidatei.Create(GetCurrentDir+'\main.ini') funktioniert übrigens wunderbar!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 18.05.05 13:06 
Hallo ihr zwei,

Das mit currentdir ist zwar ne feine Sache, aber wer sagt denn, dass die Ini dort auch liegt? Besser wären da ParamStr(0) oder application.exename, womit man den Dateinamen des eigenen Programms auslesen kann. Mit extractFilePath bekommt man dann das Verzeichnis.
Für dauerhafte Einstellungen ist die Ini dort gut aufgehoben. Soll der User Werte darin ändern können, wäre das Verzeichnis des Anwenders besser geeignet.

Weitere Hinweise: Das DF bietet die Möglichkeit, eigene Beiträge zu editieren.
Und, @theTJ: Nette Sig, so eine hatte ich bis vor lurzem auch :D

_________________
We are, we were and will not be.