Herzlich willkommen in der Delphi-PRAXiS, gerry22.
Ich sehe da einen Standardanwendungsfall für einen Zustandsautomaten.
Delphi-Quellcode:
const
S_KEY1 = 'Schlüsselwort 1';
S_KEY2 = 'Schlüsselwort 2';
S_KEY3 = 'Schlüsselwort 3';
type
TTransformState = (xsWait1, xsWait2, xsWait3);
procedure Transform(sIn, sOut: TStrings; const keywords: array of string);
var
xs: TTransformState;
i: Integer;
begin
xs := xsWait1;
Assert(Length(keywords) = 3);
sOut.BeginUpdate;
sOut.Clear;
for i := 0 to Pred(sIn.Count) do
case xs of
xsWait1: // wait for keyword 1
begin
Inc(xs, Ord(AnsiContainsText(sIn[i], keywords[Ord(xs)])));
if xs = xsWait2 then
sOut.Add(sIn[i]);
end;
xsWait2: // wait for keyword 2
begin
Inc(xs, Ord(AnsiContainsText(sIn[i], keywords[Ord(xs)])));
end;
xsWait3: // wait for keyword 3
if AnsiContainsText(sIn[i], keywords[Ord(xs)])
then xs := xsWait1
else sOut.Add(sIn[i]);
end;
sOut.EndUpdate;
end;
// Test: Transform(Memo1.Lines, Memo2.Lines, [S_KEY1, S_KEY2, S_KEY3]);
Freundliche Grüße