Autor Beitrag
Gruenschnabel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: Fr 02.07.10 07:54 
Servus!

Schleifen waren für mich schon immer ein schwarzes Tuch. So beiß ich mir seit geraumer Zeit auch hier wieder die Zähne aus (obwohl sicherlich voll einfach :-D)

Also folgendes:

Ich möchte einen vorhandenen String bearbeiten und ausgeben lassen. Die veränderungen soll der User in einer ListBox, hier abschlussbox genannt) eintrgaen können. Hierbei handelt es sich um einfache Zeichenketten. Nun soll die ListBox von oben nach unten abgearbeitet werden, indem der vorgegebene String eben auf jene vom Nutzer eingetragene Zeichenketten untersucht und dann das eingegebene aus dem String löscht.
Meine bisherigen Gedanken:

i und p sind vom Typ Integer deklariert

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
IF (abschlussbox.count)<>-1                                      //Sofern Einträge existieren, arbeite die Anweisungen ab
        Then begin
              p:= abschlussbox.count;                           //Es werden die Einträge der ListBox gezählt
              for i := 0 to p do begin                           //Wiederhole das alles solange, bis p alle Einträge durch hat
              s3:= formatiert.Items[0];                         // s3 ist der vorhandene String (auch wenn hier irreführend bezeichnet)  
              s := abschlussbox.Items[i];                       //String aus der ListBox im jeweiligen Schritt
              _pos := Pos(abschlussbox.Items[i],s3);            //suche die Position (aktueller Eintrag der ListBox) im String s3
              Delete(s3, _pos, length(abschlussbox.Items[i]));  //lösche aus s3 ab der Position des aktuellen ListBox-Eintrages alle Zeichen, wie der aktuelle String der ListBox lang ist
              formatiert.Items[0] := s3;                        //Gebe den bearbeiteten String s3  wieder aus
              end;
              end;



So, den ersten Durchgang meistert er ohne Fehlermeldung. Beim zweiten bekomme ich die fehlermeldung "List out of Bounds (1)" (oder so ähnlich, ich werd noch nen screenshot machen). Steht nichts in der listBox, wird auch nichts bearbeitet. so wie es sein soll.

Wo habe ich hier nen Denkfehler? kann mir jemand nen Denkanstoss geben?


MfG,

Gruenschnabel


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 02.07.2010 um 09:38

_________________
Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 02.07.10 08:00 
ausblenden Delphi-Quelltext
1:
for i := 0 to p 1 do begin					


weil der Index bei 0 losgeht, also ist das letzte Element count -1. Die If-Abfrage müsste daher auch > 0 lauten. Ist aber eh unnötig, die Schleife wird nicht abgearbeitet wenn Count 0 ist.
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Fr 02.07.10 09:22 
Es gibt auch in Delphi andere Möglichkeiten eine Zeichenkette zu bearbeiten. Siehe delphi.about.com/od/.../blrtlstringhand.htm bzw. delphi.about.com/lib...rtlStringReplace.htm . Oder auch mit Dialog delphi.about.com/od/...using/l/aa100599.htm .
Gruenschnabel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: Fr 02.07.10 15:44 
Wunderbar, Danke schön!!!!

An solchen Feinheiten scheiterts dann immer in der Nachtschicht :? :D

MfG,

Gruenschnabel

_________________
Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!