Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#10

Re: Allgemeines Replace mit zwei Masken

  Alt 27. Dez 2005, 18:12
Also...

Mein Fehler war, das ich das Exec vergessen hatte^^ funzt jetzt.

Nun habe ich noch folgende Funktion geschrieben, um eine Maske mit einfacher %Platzhalter% Syntax RegExpr-kopatibel zu machen und gleichzeitig (für den zweiten schritt, das einsetzen in die zweite Maske, eine Tabelle ID:Variable anzulegen)

Delphi-Quellcode:
  TData = record
    Name: String;
    ID: Integer;
  end;
  TDataTable = array of TData;

function Mask2RegExp(Mask: String; var Table: TDataTable):String;
var Akt, ID: Integer;
    S, R: String;
begin
  SetLength(Table,0);
  S:=Mask;
  Akt:=Pos('%',S);
  ID:=1;
  R:='';
  while Akt>0 do
    begin
    SetLength(Table,Length(Table)+1);
    Table[Length(Table)-1].ID:=ID;
    R:=R+Copy(S,1,Akt-1);
    Delete(S,1,Akt);
    Table[Length(Table)-1].Name:=Copy(S,1,Pos('%',S)-1);
    R:=R+'(.*?)';
    Delete(S,1,Pos('%',S));
    Akt:=Pos('%',S);
    Inc(ID);
    end;
  if R[1]='(then R:='^'+R;
  R:=R+S;
  if Length(S)=0 then R:=R+'$';
  Result:=R+S;
end;
oder geht das auch einfacher?

Die Einsetzen-funktion sieht nun wie folgt aus:
Delphi-Quellcode:
function InsertIntoString(Mask: String; Table: TDataTable; R: TRegExpr):String;
var i:Integer;
    S: String;
begin
  S:=Mask;
  for i:=0 to Length(Table)-1 do
    S:=StringReplace(S,'%'+Table[i].Name+'%',R.Match[Table[i].ID],[rfReplaceAll]);
  Result:=S;
end;
So wird aus
Value: DP ist toll
Mask1: %wer% ist %wie%
Mask2: Angeblich ist %wer% %wie%
dann endlich: Angeblich ist DP toll

JUHUHUUUUU

ich bastel das noch schön in ne Klasse, und dann kommst in die CodeLib^^
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat