Thema: Delphi Textausschnitt in Edit's

Einzelnen Beitrag anzeigen

s-off
(Gast)

n/a Beiträge
 
#5

Re: Textausschnitt in Edit's

  Alt 16. Mai 2006, 21:23
Die Funktion ExtractString(sSource, sStart, sStop: String; a: Integer): String; separiert einen Teilstring zwischen zwei Strings, hier '(' und ')'.
Damit hast Du den Teil aus den Klammern.

Mit der Funktion ParseString(sTrenner, sString: String; iCount: Integer): String; parst Du das aus den Klammern.
Damit erhältst Du einmal den ersten Teil (iCount := 1), also den EditBox-Namen, und dann den zweiten Teil (iCount := 2), also den EditBox-Inhalt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   i: Integer;
   sEditBox: String;
   sText: String;
   comp: TComponent;
begin
   for i := 0 to memData.Lines.Count do
   begin
      if Pos('define', LowerCase(memData.Lines.Strings[i])) >0 then begin
         sEditBox := ParseString(', ', WhatsInBrackets(memData.Lines.Strings[i]), 1);
         sText := ParseString(', ', WhatsInBrackets(memData.Lines.Strings[i]), 2);
      end
      else Continue;

      comp := FindComponent(StringReplace(sEditBox, #039, '', [rfReplaceAll]));
      if comp <> nil then
      begin
         TEdit(comp).Text := (StringReplace(sText, #039, '', [rfReplaceAll]));
      end;
   end;
end;

function TForm1.WhatsInBrackets(sString: String): String;
begin
   Result := ExtractString(sString, '(', ')', 1);
end;

//Einen String parsen
function TForm1.ParseString(sTrenner, sString: String; iCount: Integer): String;
var
   i : Integer;
   sErgebnis : String;
begin
   Result := '';
   if Length(sString) > 0 then
   begin
      if sString[Length(sString)] <> sTrenner then
      begin
         sString := sString + sTrenner;
      end;
      for i := 1 to iCount do
      begin
         sErgebnis := Copy(sString, 0, Pos(LowerCase(sTrenner), LowerCase(sString)) - 1);
         sString := Copy(sString, Pos(LowerCase(sTrenner), LowerCase(sString)) + 1, Length(sString));
      end;
      Result := sErgebnis;
   end;
end;

//***** Einen String von bis extrahieren
function TForm1.ExtractString(sSource, sStart, sStop: String; a: Integer): String;
var
  SubStr, bck: String;
  Pos1, Pos2, i: Integer;
begin
   i := 0;
   while i < a do
   begin
      Pos1 := Pos(sStart, sSource);
      Pos2 := Pos(sStop, sSource);
      SubStr := Copy(sSource, Pos1 + Length(sStart), Pos2 - Pos1 - Length(sStart));
      Delete(sSource, Pos1, Pos2 - Pos1 + Length(sStop));
      if SubStr = 'then {nothing}
      else if bck = 'then
         bck := SubStr
      else
         bck := bck + #13#10 + SubStr;
      i := i + 1;
   end;
   Result := bck;
end;
  Mit Zitat antworten Zitat