![]() |
Alle anderen Zeichen außer a-z entfernen!
Hi,
ich habe einen String der in etwa so aussehen kann Zitat:
Wie mache ich das am besten? |
Re: Alle anderen Zeichen außer a-z entfernen!
:hi:
Sieht der String immer in der Form aus? Also fängt er mit dem relevanten Teil an oder kann der relevante Teil auch mitten in lustigen Zeichen stehen? |
Re: Alle anderen Zeichen außer a-z entfernen!
Mal so aus dem Blauen heraus:
Delphi-Quellcode:
...:cat:...
function StripToLetters(const InStr: string): string;
var I, Cnt: Integer; begin SetLength(Result, Length(InStr)); Cnt := 0; for I := 1 to Length(InStr) do begin if InStr[I] in ['A'..'Z', 'a'..'z'] then begin Inc(Cnt); Result[Cnt] := InStr[I]; end; end; SetLength(Result, Cnt); end; |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
Ich würde das einfach so machen:
Delphi-Quellcode:
Welchen Vorteil hätte nun deine Methode?
function StripToLetters(const InStr: string): string;
var i: Integer; begin for i := 1 to Length(InStr) do begin if InStr[i] in ['A'..'Z', 'a'..'z'] then begin Result := Result + InStr[i]; end; end; end; mfg Christian |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
...:cat:... |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
mfg Christian |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
Bei kleinen Datenmengen ist es gehupft wie gesprungen, aber bei großen... :zwinker: ...:cat:... |
Re: Alle anderen Zeichen außer a-z entfernen!
Hai ihr,
nur mal so als vergleichswert:
Delphi-Quellcode:
Bei Funktion1 : 1 ms
begin
for ndx := 1 to 1000 do begin s := s + 'A'; end; end; function StripToLetters(const InStr: string): string; var I, Cnt: Integer; begin SetLength(Result, Length(InStr)); Cnt := 0; for I := 1 to Length(InStr) do begin if InStr[I] in ['A'..'Z', 'a'..'z'] then begin Inc(Cnt); Result[Cnt] := InStr[I]; end; end; SetLength(Result, Cnt); end; function StripToLetters2(const InStr: string): string; var i: Integer; begin for i := 1 to Length(InStr) do begin if InStr[i] in ['A'..'Z', 'a'..'z'] then begin Result := Result + InStr[i]; end; end; end; procedure TForm1.btn_Test1Click(Sender: TObject); var start : Cardinal; ende : Cardinal; foo : string; ndx : integer; begin start := GetTickCount; for ndx := 1 to 1000 do foo := StripToLetters(s); ende := GetTickCount; lbl_Label1.Caption := Format('Zeit %d',[ende-start]); start := GetTickCount; for ndx := 1 to 1000 do foo := StripToLetters2(s); ende := GetTickCount; lbl_Label2.Caption := Format('Zeit %d',[ende-start]); end; Bei Funktion2 : 2200 ms |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
Delphi-Quellcode:
Damit ist der String etwas verteilter und das Ergebnis "ehrlicher".
begin
Randomize; for ndx := 1 to 1000 do begin s := s + Chr(Random(Ord('z')-32)+32); end; end; ...:cat:... |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
Was ist es für ein Unterschied wie der String der Untersucht werden soll zusammengesetzt wurde? BTW: In meinen Tests fehlt noch die Zeitmessung bei der Funktion von r2c2 wenn eine etxtra "foobar" Variable verwendet wird und deren Inhalt am Ende "an Result" übergeben wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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