(Gast)
n/a Beiträge
|
Re: Textausschnitt in Edit's
16. Mai 2006, 22: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;
|
|
Zitat
|