AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Daten auf Einzigartigkeit überprüfen...
Thema durchsuchen
Ansicht
Themen-Optionen

Daten auf Einzigartigkeit überprüfen...

Ein Thema von Nelphin · begonnen am 13. Dez 2009 · letzter Beitrag vom 14. Dez 2009
Antwort Antwort
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: Daten auf Einzigartigkeit überprüfen...

  Alt 13. Dez 2009, 19:23
ok nachdem ich mit dupignore nicht weiterkam habe ich mir die Lösung mit IndexOf angeschaut... und etwas programmiert, das zwar macht was ich will aber viel zu langsam:

hier mein jetziger code:

Delphi-Quellcode:
procedure TForm1.Button23Click(Sender: TObject);
var
i:integer;
var start,dauer:Cardinal;
begin
start := GetTickCount();
  slopt.Clear; //slopt leer machen
  setlength(optvarrayindfirst,sl.Count); //index array bekommt seine länge verpasst...
  for i := 0 to 2 do begin //die ersten drei elemente kopieren, da die sowieso immer unterschiedlich sind

       slopt.Add(sl[i]);
       optvarrayindfirst[i]:=i+1; //und im indexarray speichern
       end;


   for I := 3 to sl.Count - 1 do //für den rest

    if slopt.IndexOf(sl[i])=-1 then //prüfen ob es das element schon gibt...
    try
       slopt.Add(sl[i]); // wenn nicht, hinzufügen
     finally begin
       optvarrayindfirst[i]:=slopt.count; // und index in indexarray schreiben
     end;
       end else begin
       optvarrayindfirst[i]:=(slopt.IndexOf(sl[i])+1); //wenn doch, dann die position davon ins indexarray schreiben
       end;
       dauer := GetTickCount() - start;
       panel2.Caption:='reduziert auf '+inttostr(slopt.count)+' hat '+floattostr(dauer/1000)+' Sekunden gedauert';
  end;
Wie ihr seht habe ich die zeit gestoppt die diese aktion dauert... und muß leider sagen das ist unbrauchbar für meine fälle... ein mittelgroßer datensatz hat 20 minuten gebraucht um von 122760 zeilen auf 20438 zeilen runtergekürzt zu werden...

ich erwarte aber datenmengen mit weit über 1 millionen zeilen...

dupignore kürzt den selben datensatz in 0,8 sekunden, würfelt ihn mir aber gnadenlos durcheinander und ich bekomme das mit dem indexarray nicht hin, das brauche ich aber zwingend.

hier mein Ansatz mit DupIgnore:

Delphi-Quellcode:
procedure TForm1.Button19Click(Sender: TObject);
var i:integer;
var idx:integer;

var start,dauer:Cardinal;
begin
start := GetTickCount();

slopt.clear;
slopt.Sorted:=true; // ohne das geht es nicht, aber mit kann ichs nicht gebrauchen.... oder doch??
slopt.duplicates:=dupignore;
for i := 0 to sl.count - 1 do
   slopt.Add(sl[i]);

//panel2.caption:=inttostr(slopt.Add(i)); // auskommentiert, weils nicht funktioniert...

   listbox4.Items.Add(inttostr(idx)); //
     dauer := GetTickCount() - start;
       panel2.Caption:='reduziert auf '+inttostr(slopt.count)+' hat '+floattostr(dauer/1000)+' Sekunden gedauert';
  end;
hat jemand eine idee, wie ich das indexarray mit dupignore hinbekommen kann?

danke schonmal
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:02 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