Einzelnen Beitrag anzeigen

Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#10

Re: Strings in ListView vergleichen

  Alt 15. Aug 2006, 23:17
Abend zusammen,
ich stehe schon wieder vor einem Problem.
ich habe nun wie oben beschrieben ein ListView in dem ich eine Spalte auf Unterschiede durchlaufe bzw. den Index wo ein neuer Wert anfängt in eine StringList speichere. Jetzt wollte ich die Spalte paralell daneben auf Gleichheit prüfen.

z.B.
Delphi-Quellcode:
SubItem1 | SubItem2 //Die Spalte "SubItem2" Definiert die Gruppe
---------|---------
gleich | a }
gleich | a } Gruppe1(SubItem1 = vollständig)
gleich | a }
         |
gleich | b }
ungleich | b } Gruppe2(SubItem1 <> vollständig)
ungleich | b }
SubItem2 durchlaufe ich ja schon wie beschrieben mit diesem Code womit ich den Index bekomme wo eine neue Gruppe anfängt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  sl: TStringList;
begin
  sl:= TStringList.Create;
  for i := 0 to ListView1.Items.Count - 2 do
  if not (ListView1.Items[i].SubItems[2] = ListView1.Items[i+1].SubItems[2]) then
  sl.Add(IntToStr(i+1));
end;
Jetzt wollte ich, das auf Basis dieses Codes SubItem1 durchlaufen wird und den Index des letzten Items der jeweiligen Gruppe zurrück gibt, deren Items den Wert "gleich" haben. Solange in einer Gruppe noch ein wert namens "Ungleich" ist soll garnix passieren. Bis jetzt habe ich es wieder so weit hin bekommen das es mit der ersten Gruppe klappt. Aber danach scheint irgendwo was falsch zu laufen in den For Schleifen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, idx, c :integer;
  sl, slok: TStringList;
begin
  sl:= TStringList.Create;
  for i := 0 to ListView1.Items.Count - 2 do
  if not (ListView1.Items[i].SubItems[2] = ListView1.Items[i+1].SubItems[2]) then
  sl.Add(IntToStr(i+1));
  for idx := 0 to sl.Count - 2 do
  begin
    for I := StrToInt(sl.Strings[idx]) to StrToInt(sl.Strings[idx + 1]) do
    begin
      if Listview1.Items[i].SubItems[2] = 'gleichthen c := c + 1; //hier wusste ich nicht mehr so richtig wie ich weiter
      if c = StrToInt(sl.Strings[idx + 1]) then slok.add(sl.Strings[idx + 1]; //machen sollte und dabei ist das raus gekomen
    end;
  end;
end;
Ich hoffe ich konnte mein Problem verdeutlichen und es findet sich jemand der mir helfen kann.
Danke schonmal im vorraus an alle die sich die Zeit nehmen eine Lösung zu finden.


HG
Onkelrossie
  Mit Zitat antworten Zitat