Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IniFile: Mehrere Werte mit dem selben name auslesen (https://www.delphipraxis.net/4810-inifile-mehrere-werte-mit-dem-selben-name-auslesen.html)

mirage228 12. Mai 2003 19:02


IniFile: Mehrere Werte mit dem selben name auslesen
 
Ich habe in einer Ini-Datei von mir stehen:
Code:
[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
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?

Stanlay Hanks 12. Mai 2003 19:38

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)

Nicodius 12. Mai 2003 19:49

Lösung
 
Okay ich weiß das ist ein Mittelweg:

Wenn du die Datei schreibst dann mach das so:
Delphi-Quellcode:
WriteSectionValues('blabla', 'blabla' + IntToStr(Wert));!!
Inc(Wert);
Und beim lesen:

Delphi-Quellcode:
Inc(Wert)
ReadSectionValues('blabla', 'blabla' + IntToStr(Wert));
So filterst du alle raus ;)

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]

Luckie 12. Mai 2003 20:01

Das ist keine Ini-Datei. Also wirst du mit den Ini-Funktionen nicht hinkommen. Da mußt du dir selber was einfallen lassen.

Nicodius 12. Mai 2003 20:11

Warum keine INI
 
Das ist doch ne INI

Delphi-Quellcode:
[blabla]
blabla= Zahl/Wort/boolean
oder??

Luckie 12. Mai 2003 20:15

Nein ist es nicht. Weil die Unterschlüssel nicht eindeutig sind. Siehst du ja, wenn du die Ini-Funktionen benutzt.

MathiasSimmack 12. Mai 2003 20:28

@Nicodius: Entweder die Datei selbst parsen (zeilenweise einlesen und prüfen), oder z.B. XML benutzen, da würde es gehen.

mirage228 12. Mai 2003 20:34

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)

Luckie 12. Mai 2003 20:48

Es ist keine ini-Datei! Und die wird wohl vom Programm geparst werden.

Nicodius 13. Mai 2003 05:10

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 ;)

Tom 13. Mai 2003 08:14

Zitat:

Zitat von mirage228
ja, dann wird mir wohl nichts anderes übrigbleiben, als selbst zu parsen...

TIniFile.ReadSection bzw. ReadSectionValues sollte Dir helfen.

Luckie 13. Mai 2003 08:16

Zitat:

Zitat von Tom
Zitat:

Zitat von mirage228
ja, dann wird mir wohl nichts anderes übrigbleiben, als selbst zu parsen...

TIniFile.ReadSection bzw. ReadSectionValues sollte Dir helfen.

Hat er schon probiert:
Zitat:

hab ReadSeactionValues genommen und er hat mir nur den ersten der gelichnamigen einträge angezeigt

Tom 13. Mai 2003 08:29

Zitat:

Zitat von Luckie
Hat er schon probiert:

Immer fällt man auf sich selber rein: Ich nutze immer TMemIniFile. Es geht so:
Delphi-Quellcode:
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;
Die Ini dazu:
Code:
[MirEgal]
Hallo=123
Hallo=456
Hallo=789

mirage228 13. Mai 2003 10:48

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?

Luckie 13. Mai 2003 10:50

Cursor auf TMeminiFile seztzen und tapfer F1 drücken. Der Rest ergibt sich von alleine.

[Edit=Sakura]F1 hinzugefügt :mrgreen:[/Edit]

Tom 13. Mai 2003 10:58

Zitat:

Zitat von Luckie
... und tapfer drücken.

Das Original lautet: "... und tapfer F1 drücken." 8)

mirage228 13. Mai 2003 12:19

Bei mir gibts kein TMemIniFile in der Delphi HIlfe...
liegts vllt daran, dass ich D3 Pro hab?

Luckie 13. Mai 2003 12:29

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:

Tom 13. Mai 2003 12:36

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.

Stanlay Hanks 13. Mai 2003 12:55

Prinzipiell: was sind die grundliegenden unterschiede von TiniFile und TMemIniFile?

Man liest sich, Stanlay
8)

X-Dragon 13. Mai 2003 14:33

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