AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist ruft EListerror hervor

Ein Thema von bonanza · begonnen am 27. Okt 2007 · letzter Beitrag vom 28. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 21:47
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:

for zeilennr:=0 to datei.Count-1 do
  if baseengine[zeilennr]='XXXthen
  datei.Delete(zeilennr);
  datei.Insert(zeilennr,'XXX+YYY');
aus der Delphi Hilfe:


Beschreibung zu EListError:
Zitat:
EListError ist die Exception-Klasse für Fehler, die in Verbindung mit Strings und Listen auftreten.

Klassenhierarchie

Pascal
EListError = class(Exception);
Datei
Classes

Beschreibung
EListError wird ausgelöst, wenn ein Fehler in einem Listen-, TStrings- oder TStringList-Objekt auftritt. Die häufigste Ursache ist, dass die Anwendung auf einen Eintrag verweist, der außerhalb des Listenbereichs liegt.

EListError wird außerdem ausgelöst, wenn eine Anwendung versucht, das Duplikat eines Strings zu einem TStringList-Objekt hinzuzufügen, während die Eigenschaft Duplicates den Wert dupError hat.

Eine weitere Ursache für eine EListError-Exception ist der Versuch, einen String an bestimmter Position in eine sortierte Liste einzufügen, wodurch die Sortierreihenfolge unterbrochen werden könnte.
Beschreibung zu TStringlist.Insert:
Zitat:
Beschreibung
Mit Insert können Sie der Liste den String S an der mit Index bezeichneten Position hinzufügen. Wenn Index 0 ist, wird der String am Anfang der Liste eingefügt. Ist Index 1, wird der String an der zweiten Position eingefügt usw.

Ist dem einzufügenden String ein Objekt zugeordnet, muss die Methode InsertObject verwendet werden.

Anmerkung: Bei einer sortierten Liste verursacht der Aufruf von Insert oder InsertObject eine EListError-Exception. Verwenden Sie deshalb bei sortierten Listen Add oder AddObject.

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]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 22:01
das was du geschrieben hast sieht mir gescheiter einrückung so aus:
Delphi-Quellcode:
for zeilennr:=0 to datei.Count-1 do
  if baseengine[zeilennr]='XXXthen
    datei.Delete(zeilennr);

datei.Insert(zeilennr,'XXX+YYY');
ich denke es sollte so sein:
Delphi-Quellcode:
for zeilennr:=0 to datei.Count-1 do
  if baseengine[zeilennr]='XXXthen
  begin
    datei.Delete(zeilennr);
    datei.Insert(zeilennr,'XXX+YYY');
  end;
sinvoller wäre es so:
Delphi-Quellcode:
for zeilennr:=0 to datei.Count-1 do
  if baseengine[zeilennr]='XXXthen
    datei.strings[zeilennr] := 'XXX+YYY';
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 22:20
Danke für die Antwort und den Tipp!
Habe es jetzt so abgeändert:

Delphi-Quellcode:
 for zeilennr:=0 to datei.Count-1 do
    if datei[zeilennr]='XXXthen
      datei.strings[zeilennr]:='XXX+YYY';
Allerdings bekomme ich hier immernoch den Fehler, dass angeblich der Listenindex überschritten wird...
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 22:24
Delphi-Quellcode:
for zeilennr:=0 to datei.Count-1 do
    if datei[zeilennr]='XXXthen
      datei[zeilennr]:='XXX+YYY';
Lass das .strings weg
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#5

Re: Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 22:34
es kommt dennoch zu den ListIndex-fehlern
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Stringlist ruft EListerror hervor

  Alt 27. Okt 2007, 22:42
Zitat von Progman:
Lass das .strings weg
Das ist nur die durch die "default" Option verkürzte Schreibweise und somit ein und das selbe.

Zitat von bonanza:
es kommt dennoch zu den ListIndex-fehlern
Ist das wirklich der komplette Code oder machst du noch was innerhalb der Schleife?
  Mit Zitat antworten Zitat
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#7

Re: Stringlist ruft EListerror hervor

  Alt 28. Okt 2007, 11:13
Innerhalb der Schleife kommt es nur zur Übschreibung des Textes (s.o.), sonst zu nichts.

wäre für Hilfe SEHR dankbar
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Stringlist ruft EListerror hervor

  Alt 28. Okt 2007, 11:18
Zeig doch mal die ganze Methode.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#9

Re: Stringlist ruft EListerror hervor

  Alt 28. Okt 2007, 11:29
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]='bUsePostProcessEffectsthen
                  baseengine[zeilennr]:='bUsePostProcessEffects=False';
            for zeilennr:=0 to kellerengine.Count-1 do
                if kellerengine[zeilennr]='bUsePostProcessEffectsthen
                 kellerengine[zeilennr]:='bUsePostProcessEffects=False';
     end else begin
            for zeilennr:=0 to baseengine.Count-1 do
                if baseengine[zeilennr]='bUsePostProcessEffectsthen
                  baseengine[zeilennr]:='bUsePostProcessEffects=True';
            for zeilennr:=0 to kellerengine.Count-1 do
                if kellerengine[zeilennr]='bUsePostProcessEffectsthen
                 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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Stringlist ruft EListerror hervor

  Alt 28. Okt 2007, 11:32
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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