Thema: Delphi Parametrisierter Text

Einzelnen Beitrag anzeigen

shmia

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

Re: Parametrisierter Text

  Alt 26. Jul 2006, 16:35
Ich hätte hier eine Klasse, um Wörter durch Abkürzungen zu ersetzen; das klappt auch mit Parametern:

Delphi-Quellcode:
Unit Abkuerz;

interface

uses classes, DB;

type

   TAbkuerzung = Record
   a,
   b : string;
   end;


   {
      Ersetze lange Texte durch Abkuerzungen
   }

   TStringReplacer = class(Tobject)
   private
      Fdataset : TDataSet;
      Fkurz : TStrings;
      Flang : TStrings;
   public
      constructor Create;
      destructor Destroy; override;
      function Find(const lang_text:string) : string;
      procedure Load(liste : array of TAbkuerzung); overload;
      procedure Clear;
      procedure Add(const a, b:string);
   end;

   {
      Die ausgeschriebenen und abgekuerzten Texte werden aus einer
      Datenbanktabelle geladen.
   }

   TAbkuerzen = class(TStringReplacer)
      property DataSet : TDataSet read Fdataset write Fdataset;
      function Load:boolean; overload; // Daten aus Dataset -> Stringlisten
   end;



implementation

//uses Dialogs;

constructor TStringReplacer.Create;
begin
   inherited;
   Fkurz := TStringList.Create;
   Flang := TStringList.Create;
end;

destructor TStringReplacer.Destroy;
begin
   Flang.Free;
   Fkurz.Free;
   inherited;
end;



{**************************************************************************
* NAME:    Find
* DESC:    Abkürzen des übergebenen Strings
* PARAMS:  lang_text => vollen Text (Straße / Ort)
* RESULT:  => abgekürzter Text
*************************************************************************}

function TStringReplacer.Find(const lang_text:string) : string;
var
   i, anzahl:integer;
   position:integer;
begin
   anzahl := Flang.Count;
   result := lang_text;

   for i:=0 to anzahl-1 do
   begin
      position := Pos(Flang[i], Result);
      if position > 0 then
      begin
         Delete(Result, position, Length(Flang[i]));
         Insert(Fkurz[i], Result, position);
      end;
   end;
end;



procedure TStringReplacer.Load(liste: array of TAbkuerzung);
var
   i : Integer;
begin
   Clear;
   for i := low(liste) to High(liste) do
   begin
      Flang.Add(liste[i].a);
      Fkurz.Add(liste[i].b);
   end;
end;

procedure TStringReplacer.Clear;
begin
   Flang.Clear;
   Fkurz.Clear;
end;

procedure TStringReplacer.Add(const a, b: string);
begin
   Flang.Add(a);
   Fkurz.Add(b);
end;


function TAbkuerzen.Load:boolean;
var short, long: string;
begin
   if Fdataset = nil then
   begin
      result := FALSE;
      exit;
   end;

   Clear;

   with Fdataset do
   begin
      Active := TRUE;
      while not Eof do
      begin
         short := FieldValues['KURZ'];
         long := FieldValues['LANG'];
         Flang.Add(long);
         Fkurz.Add(short);
         Next;
      end;
      Active := FALSE;
   end;
   result := TRUE;
end;

end.
Und dann
Delphi-Quellcode:
   x : TStringReplacer;

  x:= TStringReplacer.Create;
  x.Add('%Param1%', 'Test');
  x.Add('%Param2%', Versuch');
ShowMessage(x.Find(
'Das ist ein %Param1%. Dieser %Param2%'));
Andreas
  Mit Zitat antworten Zitat