![]() |
TStringlist wie TIniFile
Guten Abend
Eine kurze Frage: Kann man die TStringlist irgendwie(einfach) so um schreiben das man sie behandeln kann wie eine TIniFile? D.h. meine Stringlist hat genau den gleich Aufbau wie die ne IniFile. Dafür hätte ich halt gerne ReadString ReadInteger EraseSection usw... |
Re: TStringlist wie TIniFile
Warum nutzt du dann keine Ini, wenn deine Stringliste den gleichen Aufbau hat. Könntest dir ja ne Klasse von TIniFile ableiten, die statt aus einer Datei aus einer TStringList die Daten einliest.
MfG Pr0g |
Re: TStringlist wie TIniFile
genau das is ja der Punkt ich will keinen Dateizugriff!
Ich probier das mal mit der Instanz von der Ini-Klasse |
Re: TStringlist wie TIniFile
Moin!
TStringList bietet dir Möglichkeiten wie z.B. die EigenschafteN Names[] und Values[]. Trotzdem hat eine TStringList keine Unterstützung für Sektionen. MfG Muetze1 |
Re: TStringlist wie TIniFile
Nachdem du D6 Ent hast, kommst du auch an die VCL-Sourcen ran. Leit dir eine Klasse von der Parentklasse von TIniFile ab, und versuche, den Dateizugriff auf Speicheroperationen auf eine Adresse zu beschraenken, oder einfach auf ein Memo. Dann hast du keine Probleme mehr.
Greetz alcaeus |
Re: TStringlist wie TIniFile
Guck dir mal TMemIniFile die solltest du mit einigen wenigen Modifikationen Anpassen können! Ich habs auch schon mal gemacht hab die Source aber leider nicht mehr!
Greetz Boombuler |
Re: TStringlist wie TIniFile
Ich würde den umgekehrten Weg gehen und nicht von TIniFile, sondern von TStringList (bzw. TStrings) ableiten. Erstens ist das logischer, weil es ja schließlich eine (String-)Liste ist, die bearbeitet, bzw. aus der gelesen werden soll. Zweitens ist die Programmierarbeit an den Readxxx-Methoden dieselbe. Drittens müsste so gut wie alles an TINiFile überschrieben werden, wenn das überhaupt geht, um die Dateizugriffe zu verhindern.
//Edit: Punkt 2. würde ich, bezogen auf einen Vergleich mit TMemIniFile, so jetzt nicht mehr behaupten. Punkt 3. gilt nicht für TMemIniFile. Ob ich jetzt - 3 Std später - immer noch den oben genannten umgekehrten Weg gehen würde, halte ich zumindest für fraglich. :zwinker: |
Re: TStringlist wie TIniFile
Zitat:
|
Re: TStringlist wie TIniFile
Vielen dank für euren vielen Antworten! :thumb:
Ich probiere erstmal das mit TMemIniFile, aber ich schau mir alle an! Danke |
Re: TStringlist wie TIniFile
Als das mit der TMemInifile ist wirklich eine Klasse Idee gewesen! Aber wie ist denn das wenn ich bei Create keinen DateiNamen angebe wie speichert der das dann? Kann es irgendwie zu Fehlern kommen (Wie das mit dem UpdateFile)?
|
Re: TStringlist wie TIniFile
Die Daten werden intern einer THashedStringList gespeichert und das UpdateFile wird nur bei einer normalen TIniFile beim Freigeben aufgerufen, damit sollte es also keine Probleme geben. Hab noch nen Beispiel gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var fIni: TMemIniFile; fStrings: TStrings; begin fIni := TMemIniFile.Create(''); try fStrings := TStringList.Create; try fStrings.Add('[test_section]'); fStrings.Add('testkey=testvalue'); //Stringliste übertragen fIni.SetStrings(fStrings); finally fStrings.Free; end; ShowMessage(fIni.ReadString('test_section', 'testkey', '')); finally fIni.Free; end; end; |
Re: TStringlist wie TIniFile
Ich hab mich nun doch entschieden meine eigene Stringliste abzuleiten.
Dazu habe ich folgendes Probiert:
Delphi-Quellcode:
kann man das so machen oder übersehe ich da was und es ist doch kompliziereter?
function TdddStringlist.ReadString(Section, Value, Default : String) : String;
var i, j : integer; begin Result := Default; if Count > 0 then for i := 0 to Count - 1 do if copy(Strings[i],2,Length(Strings[i])-2) = Section then for j := i + 1 to Count - 1 do if copy(Strings[j],0,pos('=',Strings[j]) - 1) = Value then begin//Edit Result := copy(Strings[j],pos('=',Strings[j]) + 1,length(Strings[j])); break;//Edit end;//Edit end; |
Re: TStringlist wie TIniFile
Zitat:
Ich, der das anfangs sogar vorgeschlagen hatte, war da mittlerweile fast schon wieder von ab. Zitat:
Bei folgender Liste ...
Code:
... würde ...
[Sec1]
key1=val1 key2=val2 key3=val3 [Sec2] key4=val4 key5=val5
Delphi-Quellcode:
... val4 zurückliefern, was falsch ist. Eine Section hört mit dem Beginn der nächsten auf (oder, wenn keine danach folgt, am Listenende).
ReadString('Sec1','key4','SCHADE');
|
Re: TStringlist wie TIniFile
Ich denke, dass die Lösung mit dem MemIni schon zu den einfachsten gehört, da du nichtmal eigene Codes zum auslesen schreiben musst. Deine StringList schreibst du ja auch nicht selber :)
|
Re: TStringlist wie TIniFile
Dafür fehlen da aber so schöne sachen wie Count oder der Stringzugriff über einen Index
|
Re: TStringlist wie TIniFile
Hallo Leute! Ich habe genau das selbe Problem wie LOL, ich brauche eine Ini, die nur im Speicher als StringList rumliegt. Mein Problem ist, dass ich nicht an den Source ran komme.
@LOL: Könntest du die Unit der neuen "TMemIni" mal posten (anhängen) oder irgendwie sowas? Das wär super! |
Re: TStringlist wie TIniFile
Wozu willst du den Source?
Mit TMemIni kannst du eine Inidatei, bzw. besser Struktur im Speicher verwalten. Wie man die Daten anstelle einer Datei aus einer Stringlist in die MemIni einließt hatte ich hier schon gepostet: ![]() MfG Pr0g |
Re: TStringlist wie TIniFile
Sorry, hab mir nicht alles durchgelesen, die Mitte ausgelassen und gleich zu ANTWORTEN hin :oops:
Aber ich hätte dann trotzdem noch eine Frage: Wie bekomme ich den Inhalt der "MemIni" zurück, denn die Stringlist hab ich ja im Speicherfreigegeben? Und wenn ich sie nicht im Speicher freigebe, passiert mit ihr nichts, wenn ich z.B. einen Wert schreibe oder lösche! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz