![]() |
Stringlist ruft EListerror hervor
Hi,
ich habe folgendes Problem: Ich lese eine textdatei als stringlist ein und durchsuche diese dann. Wenn der eintrag X in Zeile Y gefunden wurde, dann soll Zeile wo Eintrag X drin ist gelöscht werden und dann in genau der selben Zeile ein neuer String mit "stringlist.insert" eingfügt werden. Doch dabei tritt immer ein ElistError auf, angeblich wird das Listenmaximum überschritten, was aber definitiv nicht sein kann, da nur bist datei.count-1 durchsucht wird.
Delphi-Quellcode:
aus der Delphi Hilfe:for zeilennr:=0 to datei.Count-1 do if baseengine[zeilennr]='XXX' then datei.Delete(zeilennr); datei.Insert(zeilennr,'XXX+YYY'); Beschreibung zu EListError: Zitat:
Zitat:
Das Problem ist eben, dass es keine sortierte Liste ist, da ich den Text aus einer Datei einlese und ich es nicht sortieren darf. Wie kann ich das problem lösen? vielen Dank für eure Hilfe im voraus! [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Re: Stringlist ruft EListerror hervor
das was du geschrieben hast sieht mir gescheiter einrückung so aus:
Delphi-Quellcode:
ich denke es sollte so sein:
for zeilennr:=0 to datei.Count-1 do
if baseengine[zeilennr]='XXX' then datei.Delete(zeilennr); datei.Insert(zeilennr,'XXX+YYY');
Delphi-Quellcode:
sinvoller wäre es so:
for zeilennr:=0 to datei.Count-1 do
if baseengine[zeilennr]='XXX' then begin datei.Delete(zeilennr); datei.Insert(zeilennr,'XXX+YYY'); end;
Delphi-Quellcode:
for zeilennr:=0 to datei.Count-1 do
if baseengine[zeilennr]='XXX' then datei.strings[zeilennr] := 'XXX+YYY'; |
Re: Stringlist ruft EListerror hervor
Danke für die Antwort und den Tipp!
Habe es jetzt so abgeändert:
Delphi-Quellcode:
Allerdings bekomme ich hier immernoch den Fehler, dass angeblich der Listenindex überschritten wird...
for zeilennr:=0 to datei.Count-1 do
if datei[zeilennr]='XXX' then datei.strings[zeilennr]:='XXX+YYY'; |
Re: Stringlist ruft EListerror hervor
Delphi-Quellcode:
Lass das .strings weg ;)
for zeilennr:=0 to datei.Count-1 do
if datei[zeilennr]='XXX' then datei[zeilennr]:='XXX+YYY'; |
Re: Stringlist ruft EListerror hervor
es kommt dennoch zu den ListIndex-fehlern :cry:
|
Re: Stringlist ruft EListerror hervor
Zitat:
Zitat:
|
Re: Stringlist ruft EListerror hervor
Innerhalb der Schleife kommt es nur zur Übschreibung des Textes (s.o.), sonst zu nichts.
wäre für Hilfe SEHR dankbar ;) |
Re: Stringlist ruft EListerror hervor
Zeig doch mal die ganze Methode.
|
Re: Stringlist ruft EListerror hervor
Hier kommt sie ;):
Delphi-Quellcode:
rocedure TForm1.speichernClick(Sender: TObject); var baseengine, kellerengine, blur, ShadowDepthTest: TStringList; zeilennr: integer; wert:string; begin baseengine:=TStringList.Create; kellerengine :=TStringList.Create; blur :=TStringList.Create; ShadowDepthTest:=TStringList.Create; baseengine.LoadFromFile(dir+'\Engine\Config\BaseEngine.ini'); kellerengine.LoadFromFile(dir+'\KellerGame\Config\PC\KellerEngine.ini'); blur.LoadFromFile(dir+'\Engine\Shaders\HLSL\MegaPostProcess\Blur.hlsl'); ShadowDepthTest.LoadFromFile(dir+'\Engine\Shaders\HLSL\ShadowDepthTest.hlsl'); try if tab1_nachbearbeitung_komplett.checked=true then begin showmessage(inttostr(baseengine.Count-1)); for zeilennr:=0 to baseengine.Count-1 do if baseengine[zeilennr]='bUsePostProcessEffects' then baseengine[zeilennr]:='bUsePostProcessEffects=False'; for zeilennr:=0 to kellerengine.Count-1 do if kellerengine[zeilennr]='bUsePostProcessEffects' then kellerengine[zeilennr]:='bUsePostProcessEffects=False'; end else begin for zeilennr:=0 to baseengine.Count-1 do if baseengine[zeilennr]='bUsePostProcessEffects' then baseengine[zeilennr]:='bUsePostProcessEffects=True'; for zeilennr:=0 to kellerengine.Count-1 do if kellerengine[zeilennr]='bUsePostProcessEffects' then kellerengine[zeilennr]:='bUsePostProcessEffects=True'; end; // [...] noch weitere if-bedingungen, die aber für den Test ausgeklammert wurden. baseengine.SaveToFile(dir+'\Engine\Config\BaseEngine.ini'); kellerengine.SaveToFile(dir+'\KellerGame\Config\PC\KellerEngine.ini'); blur.SaveToFile(dir+'\Engine\Shaders\HLSL\MegaPostProcess\Blur.hlsl'); ShadowDepthTest.SaveToFile(dir+'\Engine\Shaders\HLSL\ShadowDepthTest.hlsl'); finally baseengine.free; kellerengine.free; blur.free; ShadowDepthTest.free; end; end; |
Re: Stringlist ruft EListerror hervor
1. Du greifst auf unterschiedliche Listen zu. Wenn die Dateien unterschiedlich viel Zeilen haben, knallt es.
2. Wieso greifst Du auf IniFiles nicht mit den etnsprechenden Funktionen zu? [edit] Punkt 1 wurde gerade wegeditiert *gg* [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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