AGB  ·  Datenschutz  ·  Impressum  







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

TrimChars

Ein Thema von PeterPanino · begonnen am 2. Jan 2007 · letzter Beitrag vom 2. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

TrimChars

  Alt 2. Jan 2007, 09:56
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;
Angehängte Dateien
Dateityp: zip trimchars_165.zip (1,4 KB, 4x aufgerufen)
Dateityp: zip trimcharsexe_881.zip (151,4 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#2

Re: TrimChars

  Alt 2. Jan 2007, 10:11
Hi,

es funktioniert, von daher

Aber gab es da nicht auch TrimLeft und TrimRight für ?
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TrimChars

  Alt 2. Jan 2007, 10:17
Zitat von Nils_13:
Hi,

es funktioniert, von daher

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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TrimChars

  Alt 2. Jan 2007, 11:49
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: TrimChars

  Alt 2. Jan 2007, 12:00
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ß!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TrimChars

  Alt 2. Jan 2007, 12:16
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
Klaus
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: TrimChars

  Alt 2. Jan 2007, 12:21
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: TrimChars

  Alt 2. Jan 2007, 12:26
Moin Peter,

ja angeschaut hatte ich mir den Code aber wohl nicht genau genug
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: TrimChars

  Alt 2. Jan 2007, 12:30
T als Char? Für so etwas wurden Sets erfunden .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: TrimChars

  Alt 2. Jan 2007, 13:10
Zitat von Khabarakh:
T als Char? Für so etwas wurden Sets erfunden .
Wie würdest du es machen?

Schönen Gruß!
  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 21:24 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