![]() |
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. |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
...:cat:... |
Re: Alle anderen Zeichen außer a-z entfernen!
Zitat:
Aber da man die Geschwindigkeit einer Funktion immer in den Extremen testen muss liefert mein Test das richtige Ergebniss. ;-) |
Re: Alle anderen Zeichen außer a-z entfernen!
[quote="SharkyAber da man die Geschwindigkeit einer Funktion immer in den Extremen testen muss liefert mein Test das richtige Ergebniss. ;-)[/quote]Ein anderes Extrem wären leere Strings, da könnte es sein, dass die zweite Methode schneller ist als meine :mrgreen:
...:cat:... |
Re: Alle anderen Zeichen außer a-z entfernen!
Da werfe ich doch mal die Funktion aus der
![]() Kackig, Schnell und Universell.
Delphi-Quellcode:
function StrKeepChars(const S: AnsiString; const Chars: TSysCharSet): AnsiString;
var Source, Dest: PChar; begin SetLength(Result, Length(S)); UniqueString(Result); Source := PChar(S); Dest := PChar(Result); while (Source <> nil) and (Source^ <> #0) do begin if Source^ in Chars then begin Dest^ := Source^; Inc(Dest); end; Inc(Source); end; SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(AnsiChar)); end; // Beispiel s := StrKeepChars(s, ['a'-'z', 'A'-'Z']); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 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