Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Funktion zum Finden eines Wildcard-Strings

  Alt 11. Sep 2007, 19:18
Kannst du dich gedanklich von den Wildcards trennen?
(Siehe auch Posting vom Namenlozer)
Das was ich oben geschrieben habe gilt auch dann, wenn der Marker statt dem $-Zeichen ein String mit '###' ist; es wird nur etwas komplizierter.
Ich hab' da mal eine Klasse angefangen, weil ich selbst EMail-Templates brauchen könnte:
Delphi-Quellcode:
 TStringReplaceEvent = function(const name:string):string;
 TStringTemplate = class(TObject)
  private
    FDelimiter: string;
    procedure SetDelimiter(const Value: string);

  public
    procedure FindTokens(const s : string; list:TStrings);
    procedure ReplaceTokens(const s : string; event:TStringReplaceEvent);

    property Delimiter : string read FDelimiter write SetDelimiter;

  end;
...
procedure TStringTemplate.FindTokens(const s: string; list: TStrings);
var
   i : Integer;
   p1, l, sl : Integer;
begin
   Assert(Assigned(list));
   p1 := 0;
   l := length(FDelimiter);
   sl := Length(s);
   if l = 0 then
      raise Exception.Create('TStringTemplate: Delimiter ist leer');
   i := 1;
   while i <= sl do
   begin
      if Copy(s, i, l) = FDelimiter then
      begin
         if p1 = 0 then
         begin // öffnender Delimiter
            p1 := i + l; // Startpunkt merken
            Inc(i, l); // Delimiter überspringen
         end
         else
         begin // schliessender Delimiter
            list.Add(Copy(s, p1, i-p1));
            p1 := 0;
            Inc(i, l); // Delimiter überspringen
         end;
      end;
      Inc(i); // nächstes Zeichen
   end;
   if p1 <> 0 then
      raise Exception.Create('TStringTemplate: schliessender Delimiter fehlt');
end;
Andreas
  Mit Zitat antworten Zitat