![]() |
TStringList "Listindex überschreitet das Maximum"
hallo, ich habe da ein Problem
und zwar habe ich in meinem Programm eine Suche.
Delphi-Quellcode:
usw. ist jetzt nicht komplett aber ist auch nicht wichtig bzw das Problem.
for ii := 0 to Foriginal.Count-1 do
begin ss := Foriginal.Strings[ii]; if cb_negate.Checked=false then begin if Pos( LowerCase( Edit1.Text ), LowerCase( ss ) ) > 0 then begin if Pos( LowerCase( Edit2.Text ), LowerCase( ss ) ) > 0 then begin i3:=i3+1; search_add(ss,ii); end; if Edit2.Text = '' then begin i3:=i3+1; search_add(ss,ii); end; end; end ich gehe ja dann in die Prozedur "Search_Add" dort wird dann das ergebnis in das Memo feld geschrieben. So nun möchte ich aber das Suchergebnis zwischenspeichern in einen weiteren TSTRINGLIST
Delphi-Quellcode:
aber da bringt er die Fehler meldung "Listindex überschreitet das Maximum"
procedure TfrmLogView.search_add(ss: String; ii: Integer);
begin mmoLines.Lines.Add( ss ); FSelect.Strings[i3]:=ss; end; und ich weiß nicht so recht warum. i3 ist übirgens gloabal(ich weiß das nicht so gut aber hab auch keine rechte idee dafür um es besser zu machen) über eine Idee, oder hilfe wäre ich echt danlkbar weil ich keine Idee mehr habe.. |
Re: TStringList "Listindex überschreitet das Maximum&am
Deine Stringlist hat einfach nicht genug Zeilen (also weniger als i3 + 1).
|
Re: TStringList "Listindex überschreitet das Maximum&am
Was ist denn i3 an der stelle und Was steht in FSelect.Strings ?
Klingt so als wäre FSelect.Strings.count kleiner als i3+1. Das lässt sich ja leicht abfangen. Und wenns kleiner ist machst du halt statdessen FSelect.Strings.add Das ist allerdings keine garantie dafür, dass der neue string dann auf dem index i3 steht. Wie du das verwaltest musst du dir dann wohl noch überlegen ;) |
Re: TStringList "Listindex überschreitet das Maximum&am
oh
i3 wird bei jeder neuen suche auf -1 gesetzt sprich wenn er search_add aufruft hat er beim ersten mal 0. FSelect.Strings.add funtkioniert nicht, er erwartet ein "[" und FSelect.Strings.count kann ja auch noch nichts haben da ich ja erst angelegt habe und es ihm was zuweißen will. "ss" ist übirgens ein string, wie wohl schon mitbekommen wurde.^^ aber wenn der zu wenige zeilen hat, wie bekomm ich das dann aber hin das er das nicht hat? danke schon mal für die antworten |
Re: TStringList "Listindex überschreitet das Maximum&am
FSelect ist vom Typ TStringlist? Dann muss ein Add() aber gehen.
|
Re: TStringList "Listindex überschreitet das Maximum&am
jup ist vom Typ StringList
aber er sagt mir, wie gesagt "[Fehler] dLogView.pas(626): '[' erwartet, aber '.' gefunden" EDIT: ah FSelect.Add(ss); geht aber wann löscht er dann da wieder die Sachen raus? wäre das dann nicht das er jede weitere Suche das da hinzufügt? |
Re: TStringList "Listindex überschreitet das Maximum&am
FSElect scheint eher ein Array zu sein
|
Re: TStringList "Listindex überschreitet das Maximum&am
achso Fselect ist die stringlist
Sry mein Fehler Dann muss es FSelect.add heissen, nicht Fselect.strings.add Und auch FSelect.Count |
Re: TStringList "Listindex überschreitet das Maximum&am
Cool, danke scheint zu funtkionieren^^
warum das mit dem Strings so nicht funktionierte weiß ich zwar immer noch nicht aber ist ja egal *gg* |
Re: TStringList "Listindex überschreitet das Maximum&am
Weil strings eine ArrayProperty ist die auf einen array von strings zugreift.
Bzw eigentlich auf einen array von records, aber die property gibt nur strings zurück. |
Re: TStringList "Listindex überschreitet das Maximum&am
Hallo,
Zitat:
Delphi-Quellcode:
Du kommst mit ii in die Procezure rein, benutzt aber eine globales i3 als Index, warum soll das immer funktionieren, nimm mal ii.
procedure TfrmLogView.search_add(ss: String; ii: Integer);
begin mmoLines.Lines.Add( ss ); FSelect.Strings[i3]:=ss; end;
Delphi-Quellcode:
Stephan
FSelect.Strings[ii]:=ss;
|
Re: TStringList "Listindex überschreitet das Maximum&am
ii, hatte ich auch schon ganz am anfang probier gehabt. aber ii gibt ja nur die zeile die was gefunden hat zurück. dann würde er ja in zeile zb: 1,5,7 schreiben weil er da überall was gefunden hatte oder lieg ich da falsch?!
aber nächste PRoblem: lass mir jetzt das Such ergebnis ausgeben, so weit wunderbar. dann kann man eine Checkbox aktivieren in der man sagt das man in dem gefilteren bereich suchen möchte. so jetzt hab ich folgendes geändert:
Delphi-Quellcode:
wie unschwer zu erkennen sein sollte, prüf ich hier ob der button gedrückt wurde, dann soll er aus FSelect das in ss reinkopieren und wenn nicht eben aus dem orignal text.
for ii := 0 to Foriginal.Count-1 do
begin if cb_search.Checked=true then begin ss:=FSelect.Strings[ii]; end else begin ss:=Foriginal.Strings[ii]; end; so bringt mir aber eine Fehlermeldung. also gleich wie eh un je "Listindex überschreitet Maximum" aber da steht eindeutig was drin, sonst könnte er mir nichts ausgeben :wall: versteh das nicht warum der da fehler bringt... |
Re: TStringList "Listindex überschreitet das Maximum&am
Wahrscheinlich hat FOriginal mehr Zeilen als FSelect.
|
Re: TStringList "Listindex überschreitet das Maximum&am
hm ja
aber wie kann ich das dann lösen? also wegen der FOR schleife? oder könnt ich dann irgendwie die schleife vorzeigt abbrechen wenn er das maximum erreicht hat? |
Re: TStringList "Listindex überschreitet das Maximum&am
Ich verstehe den Sinn der Schleife noch nicht. Da wird ständig ss überschrieben, also könntest Du auch gleich das letzte Element zurückgeben.
|
Re: TStringList "Listindex überschreitet das Maximum&am
für meine Suche vergleich ich ja auch nur "ss", deswegen soll es ja auch überschrieben werden.
Also nutzt mir das letzte Element auch nichts :gruebel: |
Re: TStringList "Listindex überschreitet das Maximum&am
Erklär doch nochmal, was Du vorhast.
|
Re: TStringList "Listindex überschreitet das Maximum&am
Also ich habs jetzt folgendermaßen verstanden:
Du willst wissen welche zeile in FOriginal die Texte in deinen beiden Memos enthällt, und diese Zeile dann in FSelect schreiben. Willst du die da an einer bestimmten stelle stehen haben oder einfach hinten dran hängen? Dann sollte es mit .add klappen. Warum du jetzt allerdings auch in FSelect nach den Edtits suchst ist mir nicht klar. |
Re: TStringList "Listindex überschreitet das Maximum&am
@Henkst: nicht ganz
Also: mein PRogramm hat u.a. eine Suche. Zuvor lade ich über OPendialog in die Stringlist FOriginal die zeilen. so nun kann ich da fein suchen, funktioniert auch alles wunderbar in Edit1 oder/und edit2. Um alle Zeilen durchzugehen ist diese FOR schleife, soll sie zumindestens. Zwischengespeichert wird das ganze ja jetzt in Fselect. dann gibt es noch ein checkbutton, den man anklicken kann und somit sagt das er die suche nicht in Foriginal starten soll sondern das ganze mit FSelect. also schon in dem gefiltertem und nicht in dem ganzen. hoffe das reicht als Erklärung^^ ich habe nur ein Memofeld ;) |
Re: TStringList "Listindex überschreitet das Maximum&am
aachsoo ;)
folgende Anregung
Delphi-Quellcode:
wenn die checkbox gechecht ist durchsucht das die FOriginal liste, wenn nicht die FSelect liste.
if cb_search.Checked then begin
for ii := 0 to Foriginal.Count-1 do begin machwas mit der grossen liste end; end else begin for ii := 0 to Fselect.Count-1 do begin mach was mit der kleinen liste end; end; Zwei Schleifen sind zwar mehr code aber einfacher zu debugen ;) €dit Okay "=true" is raus^^ nochn €dit hast recht DaddyH ne Unterprozedur der du die entsprechende Liste übergibst wäre noch schöner |
Re: TStringList "Listindex überschreitet das Maximum&am
Und den Vergleich auf true bitte weglassen.
[edit] Eleganter wäre das btw. mit einer Unterprozedur. [/edit] |
Re: TStringList "Listindex überschreitet das Maximum&am
joar, wäre eine möglichkeit.
DAs problem ist nur, dass meine Suche ca 250 Zeilen besitzt und für beides ja es das gleiche ist. Sprich da wären dann 250 zeilen umsonst bzw zu viel, vorallem weil sie ja das gleiche machen. |
Re: TStringList "Listindex überschreitet das Maximum&am
Dann mach eine allgemeine Prozedur daraus und übergib die Liste als Parameter.
|
Re: TStringList "Listindex überschreitet das Maximum&am
Ein grosser Teil der 250 zeilen sind doch bestimmt die Checkbox Abfrage^^
Die fallen dann ja eh weg. Und wie DaddyH sagte Procedure für die suche, mit der liste als Parameter. Und je nach CheckBox.Checked die eine oder andere Liste übergeben. |
Re: TStringList "Listindex überschreitet das Maximum&am
wieso sollten die wegfallen?
also hab das jetzt so:
Delphi-Quellcode:
Search_in_Items ist logischerweise meine suche *gg*
if cb_search.Checked=false then
begin for ii := 0 to Foriginal.Count-1 do begin ss:=FOriginal.Strings[ii]; Search_in_Items(Forignal,ss,ii); end; end else begin for ii := 0 to Foriginal.Count-1 do begin ss:=FSelect.Strings[ii]; Search_in_Items(FSelect,ss,ii); end; end; end; naja jedenfalls bringt er den gleich fehler. Nur ist mir beim debuggen aufgefallen das er in "ss" nichts reinschreibt o_O? EDIT: äh Fehler hab ich gefunden, bin ein depp^^' naja nur zeigt er mir jetzt mehr zeilen an als ich vorher hatte o_O hm. ma schaun was ich da wieder für mist gebaut habe. schon mal danke =) EDIT2: T_T nu bekommt er nicht mal mehr die "normale" Suche hin |
Re: TStringList "Listindex überschreitet das Maximum&am
Beide Schleifen laufen bis FOriginal.count.
Die die FSelect behandelt muss aber logischer weise auch bis FSelect.count laufen ;) Am besten packst du tatsächlich die komplette Schleife ins Unterprogramm und läufst da bis List.count. Wobei list halt die übergebene Liste ist ;) |
Re: TStringList "Listindex überschreitet das Maximum&am
Sag ich doch ;)
|
Re: TStringList "Listindex überschreitet das Maximum&am
Zitat:
|
Re: TStringList "Listindex überschreitet das Maximum&am
ach *lol*
kommt davon wenn man zu viel ändert *gg* danke euch :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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