Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StripString Namen gesucht (https://www.delphipraxis.net/146349-stripstring-namen-gesucht.html)

WoGe 18. Jan 2010 15:14


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:
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;
Habe ich damit die 'neuen' Features richtig ausgereizt (Hatte bisher nur D7)
und wie sollte man eine solche Funktion nennen?
Gefunden habe ich folgende Namen: Getchars, StripNonConforming, OnlyInt

Grüsse
wo

himitsu 18. Jan 2010 16:13

Re: StripString Namen gesucht
 
Zumindestens könnte man das Speichermanagement verbessern
und das ginge auch schon in den Vorgänger-Delphi-Versionen.
Delphi-Quellcode:
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;
Auch wenn es mehr aussieht, ist es so im Endefekt sogar eine Berechnung weniger, je Durchlauf.
Delphi-Quellcode:
if CharInSet(c, ValidChars) then
begin
  Result[i + 1] := c;
  Inc(i);
end;

Jaynder 18. Jan 2010 16:20

Re: StripString Namen gesucht
 
und am schluss bitte noch ein
Delphi-Quellcode:
  SetLength(Result, i);

himitsu 18. Jan 2010 16:33

Re: StripString Namen gesucht
 
Wieso?

[edit]
oder "Warum?", bzw. "Weshalb?"

WoGe 18. Jan 2010 16:34

Re: StripString Namen gesucht
 
Zitat:

Zitat von himitsu
Zumindestens könnte man das Speichermanagement verbessern...

Ist das wirklich so schlimm
Delphi-Quellcode:
Result := Result + c
Das es den zusätzlichen Auwand rechtfertigt?

Gruss wo

himitsu 18. Jan 2010 16:41

Re: StripString Namen gesucht
 
Probier es einfach aus.
Delphi-Quellcode:
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;
PS: die Zeit steigt übrigens Exponential an, wärens es ansonsten (nur einmal Speicher reservieren) Linear wäre.

S:=S+'a'; bedeutet soviel, wie neuen String anlegen, beide Teile reinkopieren, alten String freigben und den neuen String an die Variable übergeben.

Jaynder 18. Jan 2010 16:44

Re: StripString Namen gesucht
 
Zitat:

Zitat von himitsu
Wieso?

[edit]
oder "Warum?", bzw. "Weshalb?"

Sonst stimmt die Länge deines Result nicht, wenn du wirklich Zeichen 'strip'st und hintendran steht eine entspechende Anzahl #0

himitsu 18. Jan 2010 16:47

Re: StripString Namen gesucht
 
Zitat:

Zitat von Jaynder
Sonst stimmt die Länge deines Result nicht, wenn du wirklich Zeichen 'strip'st und hintendran steht eine entspechende Anzahl #0

Ich kann mich täuchen, aber ich glaub es stimmt schon.

WoGe 18. Jan 2010 17:02

Re: StripString Namen gesucht
 
Hallo

ist diese Variante jetzt besser?
Delphi-Quellcode:
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;
Da reservier ich am Anfang zwar möglicherweise ein paar :) Bytes zuviel, spare mir aber die 1te Schleife

Gruss wo

Edit: Formverweise entfernt

himitsu 18. Jan 2010 17:20

Re: StripString Namen gesucht
 
Wenn du statt SizeOf(sTemp) ein Length(sTemp) nimmst, dann geht das auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Seite 1 von 2  1 2      

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