![]() |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Zitat:
was ist da so schwer zu verstehen? Zitat:
Oft liegt der Fehler auch einige Anweisungen vorher. Beachte doch mal mein letztes Posting und versuch's dann nochmal. *** liesst denn keiner meine Postings? *** |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
RavenIV, ich habe die Anzahl neu gesetzt nachdem Killduplicates ausgefuehrt wurde, aber das will auch nicht so.
Wenn ich jetzt Killdublicates weg lasse, laeuft alles wunderbar ausser das wenn ich jetzt die Listview neu laden moechte mit
Delphi-Quellcode:
Dan werden die (doppelte) Eintraege mit in der Listview angezeigt und das moechte ich beheben.
Var Sl:Tstringlist;
i,Anzahl:integer; Listitem:Tlistitem; begin //speedbutton1.Visible := false; Screen.Cursor := crHourGlass; Listview.Items.BeginUpdate; Listview.items.clear; sl:=TStringList.Create; try sl.LoadFromFile(label2.caption + '\torrents.db'); <---- hierdrin koennen doppelte sitzen //anzahl lesen anzahl:=strtoint(sl[0]); for i:=0 to anzahl do begin listitem:=listview.Items.add; //caption des items lesen listitem.Caption := sl[i*2+1]; //alle subitems des items mit einmal lesen listitem.SubItems.CommaText := sl[i*2+2]; end; finally Groupbox2.Caption := 'Anzahl torrents: ' + IntTostr(Listview.Items.count); sl.free; Listview.Items.EndUpdate; end; Screen.Cursor := crDefault; end; Zitat:
|
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
warum debuggst du das ganze nicht einfach mal durch. irgendwo in der KillDuplicates Funktion wird wohl was irgendwas über den index hinauslaufen...
|
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Zitat:
daher, dass du bei "0" anfängst, laufst du einmal zuviel durch. |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Moin Lucius,
wie hast du denn deine Datei torrents.db aufgebaut? Ist das eine CSV-Datei?
Code:
oder ist es eine folded CSV-Datei?
Datum,Category
2005-11-28,Muziek
Code:
oder ist es ein ganz anderes Format? Steht wirklich eine Anzahl in der ersten Zeile?
Datum=2005-11-28,Category=Muziek
Die Prozedur KillDuplicates() hatte ich ursprünglich für etwas anderes entworfen. Wenn du sie in deinem Projekt verwendest, dann musst du sie verstehen und an deine Bedürfnisse anpassen. Sie funktioniert unverändert, wenn du eine folded CSV-Datei verwendest, aber sie stellt die Gleichheit anhand aller Spaltenwerte fest und nicht aufgrund der Übereinstimmung nur eines bestimmten Spaltenwertes. Grüße vom marabu |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
RaveIV, leider, ich habe deine Variante probiert, downto etc.
Ich denke ich muss schon die TStringList in Ruhe lassen in der LoadFunction, das bringt so nichts, habe gestern bis 03.00 dran gessen und bin noch keinen Schritt weiter. Gibt es denn eine Function die doppelte Eintraege in einer Listview loescht? Dann gehe ich eben die Listview an den Kragen. Ich moechte dan in einer bestimmten Spalte gucken ob da doppelte drin stehen und dan loeschen. In etwa so?
Delphi-Quellcode:
Hi marabu die Datei ist so aufgebaut:
for i := Listview.Items.Count -1 downto 0 do
if Listview.Items[i].SubItems[2] = ... then Listview.Items[i].Delete.. Zitat:
|
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Hi Lucius!
so müsste es hoffentlich funktionieren:
Delphi-Quellcode:
Edit: Alternativ könntest du auch beim Hinzufügen der Einträge zu deiner Stringliste die Eigenschaft Duplicates := dupIgnore setzen. Damit werden gleiche Items nicht mehr Hinzugefügt, und du sparst dir das KillDuplicates mit den zwei Schleifen.
procedure KillDuplicates(SL: TStringList);
var I, F: integer; begin for I := SL.Count - 1 downto 0 do for F := SL.Count - 1 downto 0 do if I <> F then if SL[I] = SL[F] then begin SL.Delete(F); Break; end; end; Edit2: Zitat:
Da ich annehme, dass du die Torrents in einer Listview dem Benutzer anzeigen willst, plädiere ich für die erste Version (also vorher Duplikate raus, dann anzeigen), da es den Benutzer ja nicht zu interessieren braucht, ob da Duplikate drin sind oder waren. Außerdem dürfte es schneller gehen. |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Mein Vorschlag wäre:
Delphi-Quellcode:
marabu
procedure KillDuplicatesEx(s: TStrings; index: integer);
var iLow, iHigh: integer; sLow, sHigh: TStringList; begin sLow := TStringList.Create; sHigh := TStringList.Create; for iLow := 0 to s.Count - 2 do for iHigh := Pred(s.Count) downto Succ(iLow) do begin sLow.CommaText := s[iLow]; sHigh.CommaText := s[iHigh]; if sLow[index] = sHigh[index] then s.Delete(iHigh); end; sLow.Free; sHigh.Free; end; |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Hi marabu,
Delphi-Quellcode:
was soll ich denn den Indexwert uebergeben?
procedure KillDuplicatesEx(s: TStrings; index: integer);
MFG, Lucius. |
Re: KillDuplicates gibt Fehler mit CoolTrayIcon?
Hi Lucius,
du musst 2 übergeben, wenn du die Gleichheit anhand des Wertes im dritten Feld der CSV-Datei feststellen möchtest. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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