Einzelnen Beitrag anzeigen

Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#14

Re: Wie programmiere ich Masken?

  Alt 5. Mai 2009, 14:55
Probier mal folgenden code:
Delphi-Quellcode:
function GetMaskedString(Text: string; Mask: string; MaskPart: string): string;
var
TrennerB: string;
TrennerE: string;
TrennerEPos: integer;
TrennerBPos: integer;
TrennerBCountPosition: integer;
TrennerBCurrent: integer;
i: integer;
s: string;
begin
  //Anfangstrenner ermitteln
  TrennerBPos:=pos(MaskPart,Mask)-1;
  TrennerB:=copy(Mask,TrennerBPos,1);

  while (trennerbpos>0) and (Trim(TrennerB)='') do
  begin
    dec(TrennerBPos);
    TrennerB:=copy(Mask,TrennerBPos,1);
  end;

  if (TrennerBPos>0) then begin //Der Anfangstrenner ist ein Zeichen

    //Endtrenner ermitteln
    TrennerEPos:=pos(MaskPart,Mask)-1+length(MaskPart)+1;
    TrennerE:=copy(Mask,TrennerEPos,1);
    while (TrennerEPos<length(Mask)) and (Trim(TrennerE)='') do
    begin
      inc(TrennerEPos);
      TrennerE:=copy(Mask,TrennerEPos,1);
    end;

    //Position des gesuchten Trenners ermitteln
    TrennerBCountPosition:=0;
    for I := 0 to TrennerBPos do
    begin
      if (Mask[i]=TrennerB) then inc(TrennerBCountPosition);
    end;

    //Ergebnis:
    TrennerBCurrent:=0;
    for i := 0 to length(Text)-1 do
    begin
      if (Text[i]=TrennerB) then inc(TrennerBCurrent);
      if (TrennerBCurrent=TrennerBCountPosition) then //Jetzt handelt es sich um den richtigen!
      begin
        s:=copy(Text,i+1,length(text));
        if (trim(TrennerE)<>'') then s:=copy(s,1,pos(trim(TrennerE),s)-1);
        break;
      end;
    end;

  end else begin //Der Anfangstrenner existiert nicht, ist folglich der Anfang des Strings

    //Endtrenner ermitteln
    TrennerEPos:=pos(MaskPart,Mask)-1+length(MaskPart)+1;
    TrennerE:=copy(Mask,TrennerEPos,1);
    while (TrennerEPos<>length(Mask)) and (Trim(TrennerE)='') do
    begin
      inc(TrennerEPos);
      TrennerE:=copy(Mask,TrennerEPos,1);
    end;
    //Ergebnis ermitteln
    s:=trim(copy(text,1,pos(TrennerE,text)-1));
  end;

  //Resultat übergebem
  result:=s;

end;
klappt bei mir mit folgenden Aufrufen:
Delphi-Quellcode:
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Artist%'));
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Titel%'));
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Endung%'));
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Artist%'));
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Titel%'));
showmessage(GetMaskedString('Hans Maier - Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Endung%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Artist%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Titel%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist% - %Titel%.%Endung%','%Endung%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Artist%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Titel%'));
showmessage(GetMaskedString('Hans Maier-Der Wagen.mp3','%Artist%-%Titel%.%Endung%','%Endung%'));
usw.
  Mit Zitat antworten Zitat