| Autor |
Beitrag |
theTJ
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: Sa 14.05.05 19:24
hallo,
kann mir jemand sagen wo beim auslesen der iniFile der Fehler ligt?
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 public end;
var main: Tmain; opt, lng: TIniFile; chosenlng, lngfname: String; PLo, PLt : String; vs : ShortString; newgame, namepl1, namepl2, plo1, plt2 : ShortString; 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 := 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 ');
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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: Sa 14.05.05 19:40
theTJ hat folgendes geschrieben: | hallo,
gibt es eine möglichket den folgenden code zu verkürzen???
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
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: Sa 14.05.05 19:58
MrFox 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
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: Sa 14.05.05 20:06
is ja eigentlich klar  , aber wichtiger ist mir noch das ich beim auslesen nur das default bekomme...
theTJ hat folgendes geschrieben: | hallo,
kann mir jemand sagen wo beim auslesen der iniFile der Fehler ligt?
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 public end;
var main: Tmain; opt, lng: TIniFile; chosenlng, lngfname: String; PLo, PLt : String; vs : ShortString; newgame, namepl1, namepl2, plo1, plt2 : ShortString; 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 := 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 ');
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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: 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:
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 := 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
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: Sa 14.05.05 20:28
MrFox 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...  das geht auch nicht, da ich das ganze ja auch Linuxkompatibelmachen will...
THX
ich verspreche  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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: 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
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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...
Delphi-Quelltext 1: 2:
| lng: Tinifile; lng := Tinifile.Create(GetCurrentDir+'\xxx.ini'); |
Ich habs ausprobiert, bei mir funzts.
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
theTJ 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: So 15.05.05 13:54
_________________ 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 
      
Beiträge: 43
WIN XP: SP1
D7 enterprise
|
Verfasst: So 15.05.05 15:55
funktioniert nicht, hast du es mit einem CLX-Programm probiert???
ich habe es mit folgendem Code versucht
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
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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.
Verstanden wo der Fehler liegt?
|
|
MrFox
      
Beiträge: 208
WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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 
_________________ We are, we were and will not be.
|
|
|