IniFile: Mehrere Werte mit dem selben name auslesen
Ich habe in einer Ini-Datei von mir stehen:
Code:
Wie kann ich diese Werte mit IniFiles auslesen? Denn, wenn ich den Wert "ServerPackages" auslese, gibt der immer nur den erste Wert, nämlich "Core" zurück. Wie kann ich an die anderen Werte kommen?
[Engine.GameEngine]
ServerPackages=Core ServerPackages=Engine ServerPackages=Fire ServerPackages=Editor ServerPackages=IpDrv ServerPackages=UWeb ServerPackages=GamePlay ServerPackages=UnrealGame ServerPackages=XEffects ServerPackages=XPickups ServerPackages=XGame ServerPackages=XWeapons ServerPackages=XInterface ServerPackages=Vehicles ServerPackages=TeamSymbols_UT2003 ServerPackages=ttm2003v2 ServerPackages=ttm2003_skins |
Ich glaube das geht nich. Ich hab das gerade mit deinen Daten Probiert und hab ReadSeactionValues genommen und er hat mir nur den ersten der gelichnamigen einträge angezeigt. ich würde die dinger vielleicht durchnummerieren. aber mit gleichen namen gehts anscheinend nicht.
Man liest sich, Stanlay 8) |
Lösung
Okay ich weiß das ist ein Mittelweg:
Wenn du die Datei schreibst dann mach das so:
Delphi-Quellcode:
Und beim lesen:
WriteSectionValues('blabla', 'blabla' + IntToStr(Wert));!!
Inc(Wert);
Delphi-Quellcode:
So filterst du alle raus ;)
Inc(Wert)
ReadSectionValues('blabla', 'blabla' + IntToStr(Wert)); Tschau hoffe es hilft ach Wert steht natürlich für irgendeinen Namen eines Integer! [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Das ist keine Ini-Datei. Also wirst du mit den Ini-Funktionen nicht hinkommen. Da mußt du dir selber was einfallen lassen.
|
Warum keine INI
Das ist doch ne INI
Delphi-Quellcode:
oder??
[blabla]
blabla= Zahl/Wort/boolean |
Nein ist es nicht. Weil die Unterschlüssel nicht eindeutig sind. Siehst du ja, wenn du die Ini-Funktionen benutzt.
|
@Nicodius: Entweder die Datei selbst parsen (zeilenweise einlesen und prüfen), oder z.B. XML benutzen, da würde es gehen.
|
ja, dann wird mir wohl nichts anderes übrigbleiben, als selbst zu parsen...
mich würde trotzdem interessiert, wie ut2003 die einliest... (ist ein teil der ini vom spiel) |
Es ist keine ini-Datei! Und die wird wohl vom Programm geparst werden.
|
Aha
Aha naja, wenn sie geparst ist müsstest du das wohl oder übel auch machen
Na ja ich misch mich da jetzt nicht mehr ein ;) |
Zitat:
|
Zitat:
Zitat:
|
Zitat:
Delphi-Quellcode:
Die Ini dazu:
procedure TForm1.Button1Click(Sender: TObject);
var ini : TMeminifile; s : String; sl : TStringList; begin ini := TMemInifile.Create( 'tom.ini' ); // Pfad nicht vergessen! sl := TStringList.Create; try s := Ini.ReadString( 'MirEgal', 'Hallo', 'Wo isse?' ); ini.ReadSectionValues( 'MirEgal', Sl ); ShowMessage( s + sLineBreak + Sl.Text ); finally ini.Free; sl.Free; end; end;
Code:
[MirEgal]
Hallo=123 Hallo=456 Hallo=789 |
Hi Tom,
danke für den Vorschlag, nur kriege ich immer die Fehlermeldung "Undefinierter Bezeichner: TMemIniFile". Was muss ich einbinden oder welche Units muss ich herunterladen? Und wie funkt dann das Speichern? |
Cursor auf TMeminiFile seztzen und tapfer F1 drücken. Der Rest ergibt sich von alleine.
[Edit=Sakura]F1 hinzugefügt :mrgreen:[/Edit] |
Zitat:
|
Bei mir gibts kein TMemIniFile in der Delphi HIlfe...
liegts vllt daran, dass ich D3 Pro hab? |
Oha, das könnte es natürlich sein. Also doch selber was schreiben. Sieh' es positiv, ist auch gleich eine gute Übung und man lernt was. :wink:
|
Wenn es TMemIniFile nicht unter D3 gibt: doch selber machen oder
TBigIniFile verwenden. Ich habe mir den Soruce mal oberflächlich angesehen. Es könnte damit funktionieren. |
Prinzipiell: was sind die grundliegenden unterschiede von TiniFile und TMemIniFile?
Man liest sich, Stanlay 8) |
So viel Aufwand ist es doch eigentlich auch nicht, das man unbedingt noch eine extra Komponente dafür brauch, oder? Den Code hab ich aber nur mal eben so zusammengeschrieben und nicht getestet! :
Delphi-Quellcode:
setupliste := TStringList.Create;
if FileExists(ExtractFilePath(Application.ExeName)+'setup.txt') then setupliste.LoadFromFile(ExtractFilePath(Application.ExeName)+'setup.txt'); for i := 0 to setupliste.count -1 do if Pos(setupliste[i],'ServerPackages') = 0 then Listbox1.Add(Copy(Pos(setupliste[i].'=',Count(setupliste[i]))); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 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