AGB  ·  Datenschutz  ·  Impressum  







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

StripString Namen gesucht

Ein Thema von WoGe · begonnen am 18. Jan 2010 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

StripString Namen gesucht

  Alt 18. Jan 2010, 15:14
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:13
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:20
und am schluss bitte noch ein
  SetLength(Result, i);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:33
Wieso?

[edit]
oder "Warum?", bzw. "Weshalb?"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:34
Zitat von himitsu:
Zumindestens könnte man das Speichermanagement verbessern...
Ist das wirklich so schlimm
Result := Result + c Das es den zusätzlichen Auwand rechtfertigt?

Gruss wo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:41
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:44
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 16:47
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 17:02
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StripString Namen gesucht

  Alt 18. Jan 2010, 17:20
Wenn du statt SizeOf(sTemp) ein Length(sTemp) nimmst, dann geht das auch.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:47 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