Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TStringList "Listindex überschreitet das Maximum" (https://www.delphipraxis.net/120890-tstringlist-listindex-ueberschreitet-das-maximum.html)

Zioone 18. Sep 2008 12:31


TStringList "Listindex überschreitet das Maximum"
 
hallo, ich habe da ein Problem
und zwar habe ich in meinem Programm eine Suche.
Delphi-Quellcode:
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
usw. ist jetzt nicht komplett aber ist auch nicht wichtig bzw das Problem.

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:
procedure TfrmLogView.search_add(ss: String; ii: Integer);
begin
  mmoLines.Lines.Add( ss );

  FSelect.Strings[i3]:=ss;

end;
aber da bringt er die Fehler meldung "Listindex überschreitet das Maximum"
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..

DeddyH 18. Sep 2008 12:37

Re: TStringList "Listindex überschreitet das Maximum&am
 
Deine Stringlist hat einfach nicht genug Zeilen (also weniger als i3 + 1).

HenKst 18. Sep 2008 12:37

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 ;)

Zioone 18. Sep 2008 12:42

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

DeddyH 18. Sep 2008 12:44

Re: TStringList "Listindex überschreitet das Maximum&am
 
FSelect ist vom Typ TStringlist? Dann muss ein Add() aber gehen.

Zioone 18. Sep 2008 12:46

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?

mkinzler 18. Sep 2008 12:49

Re: TStringList "Listindex überschreitet das Maximum&am
 
FSElect scheint eher ein Array zu sein

HenKst 18. Sep 2008 12:49

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

Zioone 18. Sep 2008 12:57

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*

HenKst 18. Sep 2008 13:08

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.

nahpets 18. Sep 2008 13:16

Re: TStringList "Listindex überschreitet das Maximum&am
 
Hallo,
Zitat:

Zitat von Zioone
Cool, danke scheint zu funtkionieren^^

warum das mit dem Strings so nicht funktionierte weiß ich zwar immer noch nicht aber ist ja egal *gg*


Delphi-Quellcode:
procedure TfrmLogView.search_add(ss: String; ii: Integer);
begin
  mmoLines.Lines.Add( ss );

  FSelect.Strings[i3]:=ss;

end;
Du kommst mit ii in die Procezure rein, benutzt aber eine globales i3 als Index, warum soll das immer funktionieren, nimm mal ii.

Delphi-Quellcode:
FSelect.Strings[ii]:=ss;
Stephan

Zioone 18. Sep 2008 13:23

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:
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;
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.
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...

DeddyH 18. Sep 2008 13:24

Re: TStringList "Listindex überschreitet das Maximum&am
 
Wahrscheinlich hat FOriginal mehr Zeilen als FSelect.

Zioone 18. Sep 2008 13:27

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?

DeddyH 18. Sep 2008 13:31

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.

Zioone 18. Sep 2008 13:34

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:

DeddyH 18. Sep 2008 13:35

Re: TStringList "Listindex überschreitet das Maximum&am
 
Erklär doch nochmal, was Du vorhast.

HenKst 18. Sep 2008 13:46

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.

Zioone 18. Sep 2008 13:50

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 ;)

HenKst 18. Sep 2008 13:54

Re: TStringList "Listindex überschreitet das Maximum&am
 
aachsoo ;)

folgende Anregung
Delphi-Quellcode:
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;
wenn die checkbox gechecht ist durchsucht das die FOriginal liste, wenn nicht die FSelect liste.
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

DeddyH 18. Sep 2008 13:55

Re: TStringList "Listindex überschreitet das Maximum&am
 
Und den Vergleich auf true bitte weglassen.

[edit] Eleganter wäre das btw. mit einer Unterprozedur. [/edit]

Zioone 18. Sep 2008 13:58

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.

DeddyH 18. Sep 2008 13:59

Re: TStringList "Listindex überschreitet das Maximum&am
 
Dann mach eine allgemeine Prozedur daraus und übergib die Liste als Parameter.

HenKst 18. Sep 2008 14:03

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.

Zioone 18. Sep 2008 14:14

Re: TStringList "Listindex überschreitet das Maximum&am
 
wieso sollten die wegfallen?

also hab das jetzt so:
Delphi-Quellcode:
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;
Search_in_Items ist logischerweise meine suche *gg*
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

HenKst 18. Sep 2008 15:11

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 ;)

DeddyH 18. Sep 2008 15:13

Re: TStringList "Listindex überschreitet das Maximum&am
 
Sag ich doch ;)

mkinzler 18. Sep 2008 15:14

Re: TStringList "Listindex überschreitet das Maximum&am
 
Zitat:

Die die FSelect behandelt muss aber logischer weise auch bis FSelect.count laufen
.Count - 1 :zwinker:

Zioone 18. Sep 2008 15:27

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