Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TrimChars (https://www.delphipraxis.net/83404-trimchars.html)

PeterPanino 2. Jan 2007 09:56


TrimChars
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe eine Trim-Funktion gesucht, die am Anfang und/oder am Ende eines Strings beliebige Zeichen löscht. Da ich keine solche Funktion gefunden habe, habe ich selbst eine geschrieben. Eure Meinung dazu bitte:

Delphi-Quellcode:
function PATrimChars(S: string; CS: TSysCharSet; T: Char): string;
var
  i: integer;
begin
  Result := S;
  if T in ['L', 'B'] then // L = Left, B = Both
  begin
    for i := 1 to Length(Result) do
    begin
      if not (Result[i] in CS) then
      begin
        Result := Copy(Result, i, Length(Result) - i + 1);
        BREAK;
      end;
    end;
  end;
  if T in ['R', 'B'] then // R = Right, B = Both
  begin
    for i := Length(Result) downto 1 do
    begin
      if not (Result[i] in CS) then
      begin
        Result := Copy(Result, 1, i);
        BREAK;
      end;
    end;
  end;
end;

Nils_13 2. Jan 2007 10:11

Re: TrimChars
 
Hi,

es funktioniert, von daher :thumb:

Aber gab es da nicht auch TrimLeft und TrimRight für ?

PeterPanino 2. Jan 2007 10:17

Re: TrimChars
 
Zitat:

Zitat von Nils_13
Hi,

es funktioniert, von daher :thumb:

Aber gab es da nicht auch TrimLeft und TrimRight für ?

TrimLeft und TrimRight (sowie Trim) entfernen lediglich Leer- und Steuerzeichen. Meine Funktion entfernt beliebige Zeichen.

Christian Seehase 2. Jan 2007 11:49

Re: TrimChars
 
Moin Peter,

ich würde nicht jedesmal, wenn ein Zeichen zu entfernen ist dieses auch tun, sondern erst einmal nur zählen, wieviele Zeichen jeweils zu entfernen sind, und erst zum Schluss das Ergebnis erstellen.
Das dürfte der Performance guttun ;-)

PeterPanino 2. Jan 2007 12:00

Re: TrimChars
 
Zitat:

Zitat von Christian Seehase
Moin Peter,

ich würde nicht jedesmal, wenn ein Zeichen zu entfernen ist dieses auch tun, sondern erst einmal nur zählen, wieviele Zeichen jeweils zu entfernen sind, und erst zum Schluss das Ergebnis erstellen.
Das dürfte der Performance guttun ;-)

Hast du dir den Code überhaupt angeschaut? Es werden überhaupt keine einzelnen Zeichen entfernt ...

Schönen Gruß!

Klaus01 2. Jan 2007 12:16

Re: TrimChars
 
Ich denke schon, daß Christian sich den Code angeschaut hat.
Er hat wahrscheinlich das gemeint:
Delphi-Quellcode:
 
  for i:= ....
      if not (Result[i] in CS) then
      begin
        Result := Copy(Result, 1, i);
        BREAK;
      end;
Grüße
Klaus

xaromz 2. Jan 2007 12:21

Re: TrimChars
 
Hallo,

ich habe die Funktion etwas überarbeitet, sie kommt jetzt mit einem Copy aus, außerdem wird der QuellString als const übergeben. Das sollte die Performance etwas steigern.
Delphi-Quellcode:
function PATrimChars(const S: String; CS: TSysCharSet; T: Char): String;
var
  i: Integer;
  L, Left, Right: Integer;
begin
  L := Length(S);

  Left := 1;
  if T in ['L', 'B'] then // L = Left, B = Both
  begin
    for i := 1 to L do
    begin
      if not (S[i] in CS) then
      begin
        Left := i;
        Break;
      end;
    end;
  end;

  Right := L;
  if T in ['R', 'B'] then // R = Right, B = Both
  begin
    for i := L downto 1 do
    begin
      if not (S[i] in CS) then
      begin
        Right := i;
        Break;
      end;
    end;
  end;

  Result := Copy(S, Left, Right - Left + 1);
end;
Gruß
xaromz

Christian Seehase 2. Jan 2007 12:26

Re: TrimChars
 
Moin Peter,

ja angeschaut hatte ich mir den Code aber wohl nicht genau genug :oops: :wall:

Khabarakh 2. Jan 2007 12:30

Re: TrimChars
 
T als Char? Für so etwas wurden Sets erfunden ;) .

PeterPanino 2. Jan 2007 13:10

Re: TrimChars
 
Zitat:

Zitat von Khabarakh
T als Char? Für so etwas wurden Sets erfunden ;) .

Wie würdest du es machen?

Schönen Gruß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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