AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi KillDuplicates gibt Fehler mit CoolTrayIcon?
Thema durchsuchen
Ansicht
Themen-Optionen

KillDuplicates gibt Fehler mit CoolTrayIcon?

Ein Thema von lucius · begonnen am 29. Nov 2005 · letzter Beitrag vom 1. Dez 2005
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 10:31
Zitat von lucius:
List index out of Bounds(1).
Da hast du doch die Fehlermeldung.
was ist da so schwer zu verstehen?

Zitat von lucius:
Dann wieder die Message zum oeffnen van der CoolTrayIcon.pas was ich getan habe da gibt er an:
Delphi-Fehler sind nicht immer verlässlich.
Oft liegt der Fehler auch einige Anweisungen vorher.

Beachte doch mal mein letztes Posting und versuch's dann nochmal.

*** liesst denn keiner meine Postings? ***
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 10:49
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:
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;
Dan werden die (doppelte) Eintraege mit in der Listview angezeigt und das moechte ich beheben.
Zitat:
Da hast du doch die Fehlermeldung.
was ist da so schwer zu verstehen?
Weil egal was ich mache ich jedesmal Index out of bounds bekomme, wenn ich Killdublicates in den oberen Code setze.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#13

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 10:52
warum debuggst du das ganze nicht einfach mal durch. irgendwo in der KillDuplicates Funktion wird wohl was irgendwas über den index hinauslaufen...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 10:58
Zitat:
for i:=0 to anzahl do
lass doch mal bis "anzahl - 1" laufen...
daher, dass du bei "0" anfängst, laufst du einmal zuviel durch.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 11:10
Moin Lucius,

wie hast du denn deine Datei torrents.db aufgebaut? Ist das eine CSV-Datei?

Code:
Datum,Category
2005-11-28,Muziek
oder ist es eine folded CSV-Datei?

Code:
Datum=2005-11-28,Category=Muziek
oder ist es ein ganz anderes Format? Steht wirklich eine Anzahl in der ersten Zeile?

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
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 11:17
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:
for i := Listview.Items.Count -1 downto 0 do
   if Listview.Items[i].SubItems[2] = ... then
      Listview.Items[i].Delete..
Hi marabu die Datei ist so aufgebaut:
Zitat:
2005-11-28,"Films - DVDr","End of Days","4.36 GB", ........
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#17

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 11:50
Hi Lucius!

so müsste es hoffentlich funktionieren:

Delphi-Quellcode:
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;
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.

Edit2:
Zitat:
Gibt es denn eine Function die doppelte Eintraege in einer Listview loescht?
Das halte ich pers. nicht für sinnvoll, du solltest die Daten (wie du es ja bereits machst) vor dem Anzeigen in der Listview auf Duplikate prüfen und ggf. löschen. Außerdem nicht sich das von der Funktion her egtl. nicht viel, sei es ListView oder StringList.

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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 11:57
Mein Vorschlag wäre:

Delphi-Quellcode:
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;
marabu
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 12:08
Hi marabu,
procedure KillDuplicatesEx(s: TStrings; index: integer); was soll ich denn den Indexwert uebergeben?

MFG, Lucius.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 12:13
Hi Lucius,

du musst 2 übergeben, wenn du die Gleichheit anhand des Wertes im dritten Feld der CSV-Datei feststellen möchtest.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz