![]() |
StripString Namen gesucht
Hallo
nachdem ich für D2010 eine Function wie strman.GetChars gesucht und NIX gefunden habe, hab ich mir selber eine gemacht:
Delphi-Quellcode:
Habe ich damit die 'neuen' Features richtig ausgereizt (Hatte bisher nur D7)
function StripString(const sTemp: String;const ValidChars: TSysCharSet): String;
var c : char; begin Result := ''; for c in sTemp do if charinset(c,ValidChars) then Result := Result + c; end; und wie sollte man eine solche Funktion nennen? Gefunden habe ich folgende Namen: Getchars, StripNonConforming, OnlyInt Grüsse wo |
Re: StripString Namen gesucht
Zumindestens könnte man das Speichermanagement verbessern
und das ginge auch schon in den Vorgänger-Delphi-Versionen.
Delphi-Quellcode:
Auch wenn es mehr aussieht, ist es so im Endefekt sogar eine Berechnung weniger, je Durchlauf.
function StripString(const sTemp: String; const ValidChars: TSysCharSet): String;
var c : Char; i : Integer; begin i := 0; for c in sTemp do if CharInSet(c, ValidChars) then Inc(i); SetLength(Result, i); i := 0; for c in sTemp do if CharInSet(c, ValidChars) then begin Inc(i); Result[i] := c; end; end;
Delphi-Quellcode:
if CharInSet(c, ValidChars) then
begin Result[i + 1] := c; Inc(i); end; |
Re: StripString Namen gesucht
und am schluss bitte noch ein
Delphi-Quellcode:
SetLength(Result, i);
|
Re: StripString Namen gesucht
Wieso?
[edit] oder "Warum?", bzw. "Weshalb?" |
Re: StripString Namen gesucht
Zitat:
Delphi-Quellcode:
Das es den zusätzlichen Auwand rechtfertigt?
Result := Result + c
Gruss wo |
Re: StripString Namen gesucht
Probier es einfach aus.
Delphi-Quellcode:
PS: die Zeit steigt übrigens Exponential an, wärens es ansonsten (nur einmal Speicher reservieren) Linear wäre.
Var C: LongWord;
S: String; i: Integer; Begin S := ''; C := GetTickCount; For i := 1 to 50000000 do S := S + 'a'; Memo1.Lines.Add(IntToStr(GetTickCount - C)); S := ''; C := GetTickCount; SetLength(S, 50000000); For i := 1 to 50000000 do S[i] := 'a'; Memo1.Lines.Add(IntToStr(GetTickCount - C)); End; S:=S+'a'; bedeutet soviel, wie neuen String anlegen, beide Teile reinkopieren, alten String freigben und den neuen String an die Variable übergeben. |
Re: StripString Namen gesucht
Zitat:
|
Re: StripString Namen gesucht
Zitat:
|
Re: StripString Namen gesucht
Hallo
ist diese Variante jetzt besser?
Delphi-Quellcode:
Da reservier ich am Anfang zwar möglicherweise ein paar :) Bytes zuviel, spare mir aber die 1te Schleife
function StripString(const sTemp: String;const ValidChars: TSysCharSet): String;
var c : Char; i : Integer; begin i := 0; Setlength(result,sizeof(sTemp)); for c in sTemp do if CharInSet(c, ValidChars) then begin Inc(i); Result[i] := c; end; Setlength(result,i); end; Gruss wo Edit: Formverweise entfernt |
Re: StripString Namen gesucht
Wenn du statt SizeOf(sTemp) ein Length(sTemp) nimmst, dann geht das auch.
|
Re: StripString Namen gesucht
Wer hat eigentlich die 1-basierenden Strings verbockt?:wall:
|
Re: StripString Namen gesucht
Zitat:
Feld 0 ist dort das Längenbyte und demnach fängt bei 1 der String an. Dieses wurde dann später auf die "neuen" AnsiStrings übernommen, nur daß es dort das Längen-Byte so nicht mehr gibt. Umstellen läßt es sich jetzt nun auch nicht mehr ... sehr viele Programme würden dann ja nicht mehr laufen. |
Re: StripString Namen gesucht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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