![]() |
Listindex überschreitet Maximum - Einmal ja, einmal nein?
Huhu DP,
ich stehe mal wieder vor einem (komischen) Problem... Ich habe hier vor einiger Zeit mal eine Split Funktion gefunden die auch ganz das tut was sie soll. (Gibt eine StringList zurück). Um die Stringlist bearbeiten zu können habe ich mir noch eine eigene erstellt und folgendes gemacht:
Delphi-Quellcode:
Nun habe ich mit
StringLst := Split(Str,'|',false,false);
Delphi-Quellcode:
etwas ersetzt. Alles schön und gut.
Stringlst.Text := Stringreplace(Ergebnisse.Text,' ','',[rfreplaceall]);
stringlst.Text := Stringreplace(Ergebnisse.Text,'#',' ',[rfreplaceall]); Wenn ich jetzt aber mit einer Schleife arbeiten möchte kommt das Problem...
Delphi-Quellcode:
Es erfolgt der Fehler "Listindex überschreitet Maximum"
for I := 0 to StringLst.Count -1 do begin
//... Wenn ich es folgend mache
Delphi-Quellcode:
funktioniert alles wunderbar.
for I := 0 to Split(Str,'|',false,false).count -1 do begin
//... Wenn ich das ersetzen auslasse funktioniert es... Nur warum? Ich würde nämlich gerne mit meiner StringList arbeiten :? Hoffe ihr könnt mir helfen :) mfg, draGo |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Zitat:
|
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Hallo,
anstatt:
Delphi-Quellcode:
musst du die eine StringList der anderen StringList so übergeben:
StringLst := Split(Str,'|',false,false);
Delphi-Quellcode:
StringLst.Assign(Split(Str,'|',false,false));
|
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
ich hab auch noch eine Idee:
jeder String wird doch durch #0 abgeschlossen. Mit Deinen Ersetzen klaust Du dem #0 das #. Prüfe das doch mal in diese Richtung... |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Hallo Bernhard,
es scheint eher am ersetzen zu liegen.
Delphi-Quellcode:
Wenn ich diese beiden Zeilen (Eine weglassen führt zum Fehler wieder, egal welche) weglasse gibt Delphi mir keinen Error aus.
Stringlst.Text := Stringreplace(Ergebnisse.Text,' ','',[rfreplaceall]);
stringlst.Text := Stringreplace(Ergebnisse.Text,'#',' ',[rfreplaceall]); Der (etwas chaotische) Code der Schleife ist folgender:
Delphi-Quellcode:
Wobei "Anzeige" ein StringGrid ist.
for I := 0 to StringLst.Count -1 do begin
frmmain.anzeige.Rowcount := frmmain.anzeige.rowcount +1; if zeile > 7 then zeile := 0; if StringLst.Strings[i] = '' then StringLst.Delete(i); Frmmain.Anzeige.Cols[zeile].Add(StringLst.strings[i]); zeile := zeile +1; end; ____________________ Hallo Helmi, habe es jetzt so gemacht. Jedoch behebt das nicht das Problem :( ____________________ Hallo RavenIV, werde es mal nachprüfen . Danke :) mfG draGo |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
erzeugst du auch die StringList "Stringlst" mit
Delphi-Quellcode:
:?: :?:
Stringlst := TStringList.Create;
|
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Hallo Helmi,
ja das tue ich schon vorher ;) |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Hallo draGgo,
schaue mal in ![]() Zu deiner Split-Funktion: wenn diese dir eine Stringliste liefert, dann bist du als Aufrufer für die Freigabe der Liste verantwortlich. Befehle wie
Delphi-Quellcode:
oder
for I := 0 to Split(Str,'|',false,false).count -1 do begin
Delphi-Quellcode:
erzeugen somit Speicherlecks, weil du keine Referenz speicherst, mit der du die Liste wieder freigeben kannst.
StringLst.Assign(Split(Str,'|',false,false));
@RavenIV Du machst Witze, oder? ![]() Gruß Hawkeye |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Zitat:
Jetzt, wo ich den Link gelesen habe, ist es wieder klar. Auch ich sollte eben zweimal überlegen, bevor ich den "Absenden"-Button drücke. :oops: :| |
Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
Hallo draGo,
ein wesentliches Problem mit deinem Code aus Beitrag #1 ist:
Delphi-Quellcode:
Grüße vom marabu
begin
Ergebnisse := Split(Str,'|',false,false); Stringlst.Text := StringReplace(Ergebnisse.Text, ' ', '',[rfReplaceAll]); // Stringlst.Text := Stringreplace(Ergebnisse.Text, '#', ' ',[rfReplaceAll]); // Wenn du das Resultat der ersten Ersetzung nicht weiter verarbeitest, // dann dürfte das Eregbnis nicht deinen Erwartungen entsprechen. Stringlst.Text := StringReplace(Stringlst.Text, '#', ' ',[rfReplaceAll]); // ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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