Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string durchsuchen und tipps zu while + for-schleifen (https://www.delphipraxis.net/141239-string-durchsuchen-und-tipps-zu-while-schleifen.html)

delphi-n 6. Okt 2009 19:10

Re: [GELÖST] string durchsuchen
 
Hier kommt wieder der fehler "listenindex überschreitet das maximum (anzahl der einträge in derlistbox)", auch wenn mehrere einträge in der listbox sind.


Delphi-Quellcode:
while i<RichEdit1.Lines.Count do
    begin

      Image6.Top:=15*i+30;
      Button5.Caption := RichEdit1.Lines[i];
      Application.ProcessMessages;
      if StringEnthalten('*solange',RichEdit1.Lines[i]) then
        begin
        g:=ListBox1.Items.Count;
        i:=strtoint(ListBox1.Items[g]);    //<<<<<<<<<hier kommt listenindex..


        //i:=strtoint(ListBox1.Items[f])-1;
        end
     else if StringEnthalten('schritt',RichEdit1.Lines[i]) then
        Button1.Click
      else if StringEnthalten('linksdrehen', RichEdit1.Lines[i]) then
        Button3.Click
      else if StringEnthalten('rechtsdrehen', RichEdit1.Lines[i]) then
        Button4.Click
      else if StringEnthalten('umdrehen', RichEdit1.Lines[i]) then
         begin
        Button4.Click;
        Button4.Click;
        end
      else if StringEnthalten('solange', RichEdit1.Lines[i]) then
         begin //a

         if StringEnthalten('nichtistwand', RichEdit1.Lines[i]) then    //hier alle dinge wie istwand ect.
         begin    //b
          if (posx<15) and (posy<15) then
          begin  //c
            f:=ListBox1.Items.Count;
            h:=Strtoint(ListBox1.Items[f]); //<<<<<<<<<hier kommt listenindex..
            if i=h then  //abfrage, ob i schon in der liste ist, wenn ja entfern es
            begin  //d
            listbox1.Selected[ListBox1.Items.Count-1];
            listbox1.DeleteSelected;
            end;   //d

            while not StringEnthalten('*solange', RichEdit1.Lines[i]) do
            begin
            i:=i+1;
            end;
         end //c
          else
          listbox1.Items.Add(inttostr(i));
          continue;

        end;  //b


        end;   //a

    i:=i+1;
    sleep(200);

    end;    //while

end; //begin

@deddyH:

wie soll ich das mun ändern? :pale:

Matze 6. Okt 2009 19:14

Re: [GELÖST] string durchsuchen
 
Die Indizes fangen bei 0 an. Eine ListBox mit 5 Einträgen hat somit die Indizes 0 - 4

Delphi-Quellcode:
f := ListBox1.Items.Count;
Das würde dir jedoch die Zahl 5 liefern. Somit überschreitest du damit den maximalen ListenIndex. Je nach dem, was du vor hast, "1" abziehen.

Auch For-Schleifen müssen in dem Fall immer von 0 bis "Count - 1" laufen.

PS: Das Thema hast du seit Beitrag #5 mit einem "[GELÖST]" versehen. :lol:

Edit: Na super, dass der rote Kasten mal wieder im Urlaub ist.
Edit 2: verlesen, war gar kein Beitrag vor meinem da. :lol:

delphi-n 6. Okt 2009 19:22

Re: string durchsuchen und tipps zu while + for-schleifen
 
Zitat:

PS: Das Thema hast du seit Beitrag #5 mit einem "[GELÖST]" versehen. Laughing
habs mal geändert :D

als titel ist mir nix besseres eingefallen; wenn ihr ne idee habt, änder ichs auch gern wieder. : )


[edit]: danke, kommt kein fehler mehr :thumb:

delphi-n 6. Okt 2009 21:07

Re: string durchsuchen und tipps zu while + for-schleifen
 
ich habs mal geordnet: Trotzdem gibt es einen weiteren fehler:

Delphi-Quellcode:
while i<RichEdit1.Lines.Count do
    begin

      Image6.Top:=15*i+30;
      Button5.Caption := RichEdit1.Lines[i];
      Application.ProcessMessages;
      if StringEnthalten('+solange',RichEdit1.Lines[i]) then
        begin    
        g:=ListBox1.Items.Count-1;  
        i:=strtoint(ListBox1.Items[g]); //i soll die letze zahl aus der listbox auslesen, und zur dieser zeile springen. Das Problem: Wenn ich die while-schleife weiter durchlaufen lasse, dann wird unten i+1 gesetzt :(
//wenn ich hier aber i:=i-1; hinschreibe, klappt es trotzdem nicht. Kann man dem nicht sagen, dass er wieder am anfang der while schleife beginnen soll?
     

       
        end
     else if StringEnthalten('schritt',RichEdit1.Lines[i]) then
        Button1.Click
      else if StringEnthalten('linksdrehen', RichEdit1.Lines[i]) then
        Button3.Click
      else if StringEnthalten('rechtsdrehen', RichEdit1.Lines[i]) then
        Button4.Click
      else if StringEnthalten('umdrehen', RichEdit1.Lines[i]) then
         begin
        Button4.Click;
        Button4.Click;
        end
      else if StringEnthalten('solange', RichEdit1.Lines[i]) then
         begin //a

              if StringEnthalten('nichtistwand', RichEdit1.Lines[i]) then    //hier alle dinge wie istwand ect.
              begin    //b

                  if (posx&lt;15) and (posy&lt;15) then
                  begin  //c
                      f:=ListBox1.Items.Count-1;
                      h:=Strtoint(ListBox1.Items[f]);
                      Label3.Caption:=Inttostr(h);  
                      if i=h then  //abfrage, ob i schon in der liste ist, wenn ja entferne es
                      begin  //d
                      listbox1.Selected[ListBox1.Items.Count-1];
                      listbox1.DeleteSelected;
                        while not StringEnthalten('*solange', RichEdit1.Lines[i]) do
                        begin
                        i:=i+1;
                        end;
                      end   //d



                  else    //c
                      listbox1.Items.Add(inttostr(i));
                      continue;
                  end; //c
              end;  //b


          end;   //a

    i:=i+1;
    sleep(200);

    end;    //while


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.
Seite 6 von 6   « Erste     456   

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