Zitat von
Muetze1:
Sollte das nicht schneller gehen als auch noch die Strings in der grossen Schleife durchzugehen. Und mit Pos() klappt es auch, da ein .. nachher nicht mehr zu finden sein sollte.
Ich bezweifel das ständige Pos aufrufe schneller sind.
1. Ist ein Funktionsaufruf immer "Verhältnismäßig" langsam.
2. geht Pos immer von Anfang den String durch. Macht also viele unnütze Aktionen.
3. Bei Delete ist doch das gleiche Probleme wie viele SetLengths. Es wird jedes mal neuer Speicher angefordert und alter freigegeben. Was insgesamt sicherlich negativ auf die Performance ausschlagen wird.
Einzige Optimierung die mir noch einfallen würde ist, am Anfang alle Separatoren zu überspringen.
Delphi-Quellcode:
var
Start: Integer;
begin
Len:=Length(s);
Start:=1;
while (result[Start]=c) and (Start<Len) do
inc(Start);
for i := Start to length(s) do
(irgendwie sowas) Dadurch spart man sich das result[1] = #0 im if.
Statt Len := Len+1 benutze inc(Len);
statt immer s[i] und result[len] zu machen könntest du auch einen Pointer (PChar) verwenden, der immer erhöht wird.[/delphi]