AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nach Alphabet sortieren (ValueListEditor)

Ein Thema von TheMiller · begonnen am 29. Nov 2003 · letzter Beitrag vom 9. Jun 2013
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Nach Alphabet sortieren (ValueListEditor)

  Alt 29. Nov 2003, 20:26
Hi,

wie der Name schon sagt: Wie kann ich die Einträge einer ValueList nach Alphabet sortieren?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Nach Alphabet sortieren (ValueListEditor)

  Alt 29. Nov 2003, 22:23
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Die Einfache Variante:
Delphi-Quellcode:
Var I, I2: Integer;
  S: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do
    If ValueListEditor1.Strings[I] > ValueListEditor1.Strings[I2] Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
ValueListEditor1.Strings[...] enthält eine Kombination aus Schlüssel und Wert ("Schlüssel=Wert") und wenn genauer sortiert werden soll, muß der String geteilt werden.

Nach Schlüssel:
Delphi-Quellcode:
Var I, I2: Integer;
  S, S2: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do Begin
    S := Copy(ValueListEditor1.Strings[I], 1, Pos('=',
      ValueListEditor1.Strings[I] - 1);
    S2 := Copy(ValueListEditor1.Strings[I2], 1, Pos('=',
      ValueListEditor1.Strings[I2] - 1);
    If S > S2 Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
  End;
Nach Wert:
Delphi-Quellcode:
Var I, I2: Integer;
  S, S2: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do Begin
    S := Copy(ValueListEditor1.Strings[I], Pos('=',
      ValueListEditor1.Strings[I] + 1, Length(ValueListEditor1.Strings[I]));
    S2 := Copy(ValueListEditor1.Strings[I2], Pos('=',
      ValueListEditor1.Strings[I2] + 1, Length(ValueListEditor1.Strings[I2]));
    If S > S2 Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
  End;
Oder mal eine Hochgenaue Variante for Schlüssel
Delphi-Quellcode:
Var I, I2: Integer;
  S, S2, S3, S4: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do Begin
    S := Copy(ValueListEditor1.Strings[I], 1, Pos('=',
      ValueListEditor1.Strings[I] - 1);
    S2 := Copy(ValueListEditor1.Strings[I], Pos('=',
      ValueListEditor1.Strings[I] + 1, Length(ValueListEditor1.Strings[I]));
    S3 := Copy(ValueListEditor1.Strings[I2], 1, Pos('=',
      ValueListEditor1.Strings[I2] - 1);
    S4 := Copy(ValueListEditor1.Strings[I2], Pos('=',
      ValueListEditor1.Strings[I2] + 1, Length(ValueListEditor1.Strings[I2]));
    While Length(S) < Length(S3) do S := S + ' ';
    While Length(S3) < Length(S) do S3 := S3 + ' ';
    While Length(S2) < Length(S4) do S2 := S2 + ' ';
    While Length(S4) < Length(S2) do S4 := S4 + ' ';
    If (S > S3) or ((S = S3) and (S2 > S4)) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
  End;
Und noch mal für Wert:
Delphi-Quellcode:
Var I, I2, I3: Integer;
  S, S2, S3, S4: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do Begin
    S := Copy(ValueListEditor1.Strings[I], 1, Pos('=',
      ValueListEditor1.Strings[I] - 1);
    S2 := Copy(ValueListEditor1.Strings[I], Pos('=',
      ValueListEditor1.Strings[I] + 1, Length(ValueListEditor1.Strings[I]));
    S3 := Copy(ValueListEditor1.Strings[I2], 1, Pos('=',
      ValueListEditor1.Strings[I2] - 1);
    S4 := Copy(ValueListEditor1.Strings[I2], Pos('=',
      ValueListEditor1.Strings[I2] + 1, Length(ValueListEditor1.Strings[I2]));
    While Length(S) < Length(S3) do S := S + ' ';
    While Length(S3) < Length(S) do S3 := S3 + ' ';
    While Length(S2) < Length(S4) do S2 := S2 + ' ';
    While Length(S4) < Length(S2) do S4 := S4 + ' ';
    If (S2 > S4) or ((S2 = S4) and (S > S3)) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
  End;

http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Nach Alphabet sortieren (ValueListEditor)

  Alt 30. Nov 2003, 01:14
*plattis*

Das ist eigentlich "Code-Lobrary-Reif"

Naja, ich denke was du sagen willst. Ich bin sehr sehr erfreut und es funzt einwandtfrei. Vielen Dank für deine Bemühungen
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Nach Alphabet sortieren (ValueListEditor)

  Alt 30. Nov 2003, 01:36
Nur der Vollstängkeit halber: Die Namen / Werte lassen sich auch ohne umständliches Copy() ermitteln:

  ValueListEditor1.Strings.Names[I] bzw.
  ValueListEditor1.Strings.Values['Name']; Oder die Kombination, um einen Wert per Index zu bekommen:
  ValueListEditor1.Strings.Values[ValueListEditor1.Strings.Names[I]]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Nach Alphabet sortieren (ValueListEditor)

  Alt 30. Nov 2003, 03:02
Noch ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

hatte mit ValueListEditor noch nicht so viel zu tun.
Also jetzt noch mal überarbeitet.

Hab sogar noch eine Verbesserung gefunden:
Delphi-Quellcode:
ValueListEditor1.Strings.Values[ValueListEditor1.Strings.Names[I]]
{=}
ValueListEditor1.Strings.ValueFromIndex[I]
Nach Schlüsseln in aufsteigender Reihfolge (A => Z):
Delphi-Quellcode:
Var I, I2: Integer;
  S: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do
    If (ValueListEditor1.Strings.Names[I] > ValueListEditor1.Strings.Names[I2]) or
      ((ValueListEditor1.Strings.Names[I] = ValueListEditor1.Strings.Names[I2]) and
      (ValueListEditor1.Strings.ValueFromIndex[I] > ValueListEditor1.Strings.ValueFromIndex[I2])) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
Nach Werten in aufsteigender Reihfolge (A => Z):
Delphi-Quellcode:
Var I, I2: Integer;
  S: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do
    If (ValueListEditor1.Strings.ValueFromIndex[I] > ValueListEditor1.Strings.ValueFromIndex[I2]) or
      ((ValueListEditor1.Strings.ValueFromIndex[I] = ValueListEditor1.Strings.ValueFromIndex[I2]) and
      (ValueListEditor1.Strings.Names[I] > ValueListEditor1.Strings.Names[I2])) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
Nach Schlüsseln in fallender Reihnfolge (Z => A):
Delphi-Quellcode:
Var I, I2: Integer;
  S: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do
    If (ValueListEditor1.Strings.Names[I] < ValueListEditor1.Strings.Names[I2]) or
      ((ValueListEditor1.Strings.Names[I] = ValueListEditor1.Strings.Names[I2]) and
      (ValueListEditor1.Strings.ValueFromIndex[I] < ValueListEditor1.Strings.ValueFromIndex[I2])) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;
Nach Werten in fallender Reihfolge (Z => A):
Delphi-Quellcode:
Var I, I2: Integer;
  S: String;

For I := 0 to ValueListEditor1.Strings.Count - 2 do
  For I2 := I + 1 to ValueListEditor1.Strings.Count - 1 do
    If (ValueListEditor1.Strings.ValueFromIndex[I] < ValueListEditor1.Strings.ValueFromIndex[I2]) or
      ((ValueListEditor1.Strings.ValueFromIndex[I] = ValueListEditor1.Strings.ValueFromIndex[I2]) and
      (ValueListEditor1.Strings.Names[I] < ValueListEditor1.Strings.Names[I2])) Then Begin
      S := ValueListEditor1.Strings[I];
      ValueListEditor1.Strings[I] := ValueListEditor1.Strings[I2];
      ValueListEditor1.Strings[I2] := S;
    End;

http://www.FrankNStein.de/Smiley-Kuss.gif http://www.FrankNStein.de/Smiley-Spinne.gif http://www.FrankNStein.de/Smiley-Winken.gif
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Nach Alphabet sortieren (ValueListEditor)

  Alt 30. Nov 2003, 03:51
Mal als billige alternative:

Delphi-Quellcode:
var SortList: TStringList;
begin
  SortList := TStringList.Create;
  with ValueListEditor1 do
  begin
    SortList.Assign(Strings);
    SortList.Sort;
    Strings.Assign(SortList);
  end;
  SortList.Free;
end;
Das sortiert die Einträge jetzt aufsteigend... für Absteigend müsste man das entweder rückwärts zurückkopieren (billige Version), oder aber man müsste mit CustomSort arbeiten (der korrekte Weg).

Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Nach Alphabet sortieren (ValueListEditor)

  Alt 9. Jun 2013, 00:59
Dieser Tip war Gold wert! Vielen Dank dafür
  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 21:15 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