![]() |
In Listview enthaltene Werte Prüfen und einfärben
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!
vorab: keine ahnung ob der Titel so richtig gewählt ist, wenn nein dann sry. Also kurz zur Erklärung: Ich schreibe an einem Programm was eine Webseite nach internen Links durchsucht und diesen Links dann folgt. Alle gefundenen Seiten speichere ich in das ListView. Caption ist meine URL, subItem[0] ist der Seitentitel und SubItem[1] ist der MD5Diggest aus dem Quelcode. Ziel von mir ist es nun mit dem Programm zum einen eine Liste aller Unterseiten der Webseite anzufertigen. Das Funktioniert bereits wunderbar! Jetzt würde ich gerne wegen Suchmaschinen (daher der MD5Diggest) dem Benutzer anzeigen welche Seiten den gleichen Inhalt haben. Dies soll aber nur Optional gemacht werden was ja nichs hier zur Sache beiträgt :) Also wie gesagt habe ich wie im angehängten Screenshot ein Listview mit den 3 Spalten. Wie müsste ich nun vorgehen um möglichst resourcen schonend alle Items einzufärben die doppelt vorkommen. dabei sollen die Items die nur einmal vorkommen unberührt bleiben. Am allerbesten wäre jetzt sogar noch das alle möglcihen doppelte Seiten immer mit einer anderen Farbe gemalt werden. Wie das beispiel im 2. Scrreenshot. Über gute anregungen würde ich mich sehr freuen, weil ich steh komplett aufm schlauch wie ich das angehen soll :( ps: schönes forum :) Grüße Sven |
Re: In Listview enthaltene Werte Prüfen und einfärben
Hallo Sven,
wenn du Gleichheit über den Hash feststellst, dann ist es wohl das Beste, wenn du eine invertierte Liste erzeugst, in der du über den Hash-Wert schnell die Anzahl der URLs bestimmen kannst. Eine sortierte StringList könnte dir da nützlich sein, in deren Objects du einfach den Zähler unterbringst.
Delphi-Quellcode:
Zum Färben kannst du dann schnell auf die Anzahl zugreifen:
// getippt und nicht getestet
var sl: TStringlist; // sorted = true; duplicates = dupIgnore procedure Checkin(s: TStrings; hash: string); var index: integer; begin index := s.IndexOf(hash); if index < 0 then s.AddObject(hash, Pointer(1)) else s.Objects[index] := Pointer(Succ(Integer(s.Objects[index]))); end; begin CheckIn(sl, hash); end;
Delphi-Quellcode:
Grüße vom marabu
function IsUnique(s: TStrings; hash: string): boolean;
begin with s do Result := not Assigned(Objects[IndexOf(hash)]); end; |
Re: In Listview enthaltene Werte Prüfen und einfärben
Besten dank!
ich habs zwar nicht genau so gemacht wie du es mir geschrieben hast, aber das war der denkanstoß den ich brauchte! nun färbt er die richtigen dinge ein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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