Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringliste Umkehren (https://www.delphipraxis.net/110189-stringliste-umkehren.html)

simon790 14. Mär 2008 13:10


Stringliste Umkehren
 
Hallo Ich mcöhte den Inhalt einer Stringliste Umkehren...Also erstes Elemnt an letzter Stelle und das Letzte an ester Stelle ect...

Zuerst

A
B
C
D

Nacher

D
C
B
A

Ich habe mal folgenden Code geschrieben mit dem es soweizt funktioniert.

procedure TForm1.Button1Click(Sender: TObject);
var i,d: Integer;
begin
With OpenDialog1 do
begin
if Execute then
begin
Daten.LoadFromFile(Filename); //Daten in die Stringlist kopieren
end;
end;
d:= Daten.Count; //Anzahl Zeilen ermitteln
DatenU.Assign(Daten); //Die Umgekehrte Stringlist "DatenU" mit der richtigen gGrösse erstellen
for i := 1 to d do
begin
DatenU.Strings[i-1]:= Daten.Strings[d-i] //Zeilen umsortieren
end;
Label1.Caption:=IntToStr(d);
Memo1.Lines:=Daten;
Memo2.Lines:=DatenU;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Daten := TStringList.Create;
DatenU := TStringList.Create;
end;



Da die Stringlist aber ziemlich gross werden können (txt-Logfiles) dauert dieser Algorythmus etwas lange.

Hat jemand eine elegantere Lösung?
Besten Dank und Gruss

Simon

Hansa 14. Mär 2008 13:13

Re: Stringliste Umkehren
 
Wohl noch nie was von DOWNTO gehört ?

simon790 14. Mär 2008 13:19

Re: Stringliste Umkehren
 
Inwiefern ist DOWNTO die Antwort auf meine Frage?

mkinzler 14. Mär 2008 13:21

Re: Stringliste Umkehren
 
Zitat:

Zitat von simon790
Inwiefern ist DOWNTO die Antwort auf meine Frage?

Gar nicht.

Klaus01 14. Mär 2008 13:21

Re: Stringliste Umkehren
 
Was Hansa meint ist vielleicht das:

Delphi-Quellcode:
datenU:= TStringList.create;
for i:=daten.count -1 downto 0 do
  DatenU.add(daten[i]);

Memo2.lines.assign(datenU);
datenU.free;
Ob das schneller ist, sei mal dahingestellt.

Grüße
Klaus

inherited 14. Mär 2008 13:28

Re: Stringliste Umkehren
 
downto brauchst du noch nicht mal!
Delphi-Quellcode:
var s: String;
...
for i := 0 to (sl.Count-1) div 2 do
begin
  s:=sl[i];
  sl[i]:=sl[sl.Count-i-1];
  sl[sl.Count-i-1]:=s;
end;
(ungetestet)

DeddyH 14. Mär 2008 13:29

Re: Stringliste Umkehren
 
Ist TStringList.CustomSort die Antwort auf Deine Frage? :mrgreen:

bluesbear 14. Mär 2008 13:45

Re: Stringliste Umkehren
 
Zitat:

Zitat von DeddyH
Ist TStringList.CustomSort die Antwort auf Deine Frage? :mrgreen:

Ich denke nein, Tim :mrgreen:
Es kommt darauf an, was bezweckt werden soll. DOWNTO is gut, wenn man die Elemente einer Stringlist in umgekerhter Reihenfolge durchgehen will. Wenn das nicht die beabsichtigte Aktion ist, dann fürchte ich, es geht halt nicht schneller. Zumindest fällt mir nix ein, was man an dem simon790 seinem Code verbessern könnte. Außer der Formatierung. Oder so. Ich mein ja nur..

Klaus01 14. Mär 2008 13:46

Re: Stringliste Umkehren
 
.. ist denn TStringList.exchange nicht ehr für soetwas gut?

Delphi-Quellcode:
j:=0;
for i:=daten.count -1 downto (daten.count -1) div 2 do
  begin
    daten.exchange(i,j);
    inc(j);
  end;
[ungetestet)

Aus der Hilfe zu Exchange:
Swaps the position of two strings in the list.

procedure Exchange(Index1, Index2: Integer); override;

Description

Call Exchange to rearrange the strings in the list. The strings are specified by their index values in the Index1 and Index2 parameters. Indexes are zero-based, so the first string in the list has an index value of 0, the second has an index value of 1, and so on.

If either string has an associated object, Exchange changes the index of the object as well.

Warning: Do not call Exchange on a sorted list except to swap two identical strings with different associated objects. Exchange does not check whether the list is sorted, and can destroy the sort order of a sorted list.


Grüße
Klaus

bluesbear 14. Mär 2008 13:51

Re: Stringliste Umkehren
 
Zitat:

Zitat von Klaus01
TStringList.exchange

Ich bin beschämt. Da kam ich nicht drauf <seufz>


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Seite 1 von 4  1 23     Letzte »    

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