AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

e-mail adressen ordnen im memo

Ein Thema von biby90 · begonnen am 12. Aug 2011 · letzter Beitrag vom 14. Aug 2011
Antwort Antwort
Seite 4 von 6   « Erste     234 56   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#31

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 16:19
Das geht schon schneller, wenn Du am Anfang Memo1.Lines.BeginUpdate und am Ende Memo1.Lines.EndUpdate aufrufst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#32

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 16:59
Die Bremse dürfte hier dennoch (trotz BeginUpdate/EndUpdate) das Memo sein. Vielleicht temporär in einer SL speichern.

Delphi-Quellcode:
var
  SL: TStringList;
begin
  SL:= TStringList.Create;
  SL.Assign(Memo1.Lines);
  EmailAddressesSort(SL);
  Memo1.Lines.Assign(SL);
  SL.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#33

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 17:01
Und was soll das bringen? Wenn das Memo nicht neu gezeichnet wird, haben wir doch denselben Effekt ohne Hin- und Herkopiererei.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#34

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 17:10
Probier's halt aus.

Delphi-Quellcode:
function GetNamePart(const s: string): string;
var
  I: integer;
begin
  Result:= '';
  for I:= 1 to Length(S) do
    if S[I] = '@then
    begin
      Result:= Copy(S, 1, I-1);
      Break;
    end;
end;

function GetDomainPart(const s: string): string;
var
  I: integer;
begin
  Result:= '';
  for I:= 1 to Length(S) do
    if S[I] = '@then
    begin
      Result:= Copy(S, I+1, Length(S)-I);
      Break;
    end;
end;

procedure QuickSort(const Strings: TStrings; L, R: Integer);
var
  I, J, K: Integer;
  P: string;
begin
  repeat
    I:= L;
    J:= R;
    K:= (L + R) shr 1;
    P:= AnsiLowerCase(Trim(Strings[K]));
    repeat
      while AnsiLowerCase(Trim(Strings[I])) < P do Inc(I);
      while AnsiLowerCase(Trim(Strings[J])) > P do Dec(J);
      if I <= J then
      begin
        Strings.Exchange(I, J);
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then QuickSort(Strings, L, J);
    L:= I;
  until I >= R;
end;

procedure EMailAddressesSort(const Strings: TStrings; const SortByDomain: boolean = false);
var
  I, J: integer;
  T1, T2, D1, D2: string;
  ExChange: boolean;
begin
  Strings.BeginUpdate;
  if not SortByDomain then
    QuickSort(Strings, 0, Strings.Count-1)
  else
  begin
    for I:= 0 to Strings.Count-2 do
      for J:= I+1 to Strings.Count-1 do
      begin
        T1:= AnsiLowerCase(Trim(Strings[I]));
        T2:= AnsiLowerCase(Trim(Strings[J]));
        ExChange:= false;
        if T1 > T2 then
          ExChange:= true
        else
        begin
          D1:= GetDomainPart(T1);
          D2:= GetDomainPart(T2);
          if D1 > D2 then
            ExChange:= true
          else
            if D1 = D2 then
              if GetNamePart(T1) > GetNamePart(T2) then ExChange:= true;
        end;
        if ExChange then Strings.Exchange(I,J);
      end;
  end;
  Strings.EndUpdate;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL:= TStringList.Create;
  SL.Assign(Memo1.Lines);
  EmailAddressesSort(SL);
  Memo1.Lines.Assign(SL);
  SL.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  EmailAddressesSort(Memo1.Lines);
end;

Geändert von Bjoerk (12. Aug 2011 um 19:27 Uhr) Grund: Code eingefügt, Quicksort eingefügt, TStrings eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#35

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 17:59
Wenn Du mir jetzt noch erklärst, wieso Du einmal ein Memo und einmal eine TStringlist übergibst anstatt einfach nur TStrings und damit nur eine einzige Sort-Routine benötigst, dann probiere ich es vielleicht tatsächlich.

[edit] Und wenn man schon auf Quicksort umschwenkt: das bringt die TStringList schon von Haus aus mit. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (12. Aug 2011 um 18:08 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#36

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 19:12
daran hatte ich nicht gedacht, da hast du natürlich recht. aber wie kriegt man dann den lowercase (bei stringlist) in den algo rein?

Edit: DeddyH, hab's entsprehend überarbeitet.
Ist aber immer noch ein erheblicher Geschwindigkeitsunterschied!?

Geändert von Bjoerk (12. Aug 2011 um 19:30 Uhr) Grund: Edit
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#37

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 19:22
In der allergrößten Not über CustomSort. In der Hilfe steht etwas von einer Property CaseSensitive, aber ich weiß nicht, seit wann es die gibt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#38

AW: e-mail adressen ordnen im memo

  Alt 12. Aug 2011, 22:13
Nee, die Bremse ist die Speicherverwaltung des Memos.
BeginUpdate kann schon viel erreichen, aber ein externes Sortieren kann schneller sein.

Zumindestens ein Sortierverfahren mit möglichst wenigen lesenden und vorallem schreibenden zu Griffen kann da schon so einiges rausholen.




Bei einer TStringList liegen die einzelnen Strings (Zeilen) schon einzeln im Speicher vor und man kann da sehr schnell drauf zugreifen und auch was ändern/verschieben, da nur Zeiger verschoben werden.

Beim Memo liegt alles als ein einziger großer String vor, wo beim Tausch zweier Zeilen schonmal der gesamte Memo-Inhalt mehrmals umkopiert werden muß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Aug 2011 um 12:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#39

AW: e-mail adressen ordnen im memo

  Alt 13. Aug 2011, 11:44
Findet Ihr es nicht selber albern, bei einem Bubblesort über Optimierungen zu schwadronieren? Da ist doch jede Anstrengung verschwendete Zeit, das Ganze ist ja wohl eher als Übungsaufgabe in der Ausbildung zu sehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#40

AW: e-mail adressen ordnen im memo

  Alt 13. Aug 2011, 13:24
Sehe jetzt nicht, daß hier jemand albern ist. BTW: Wenn in Abhängigkeit sortiert werden soll, geht der Quciksort nicht, da dieser auf <= prüft.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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