Bei diesem Thread ist mir aufgefallen, dass ich gar keine Standardfunktion in der LCL kenne, welche diese recht alltägliche Situation lösen kann.
Kennt ihr eine solche Funktion in der LCL? Wie heisst die?
Falls nicht, möchte ich wissen, was ihr davon hält, so eine Funktion in die StrUtils aufzunehmen.
Als Vorschlag hätte ich mal das:
Code: Alles auswählen
function CopyFromPosToPos(S: string; Start: string; Ende: string;
var Position: integer): string; overload;
var
A, B: integer;
begin
Result := EmptyStr;
if S <> EmptyStr then
begin
if Start = EmptyStr then A := Position
else
A := Pos(Start, S, Position);
Position := -1;
if A > 0 then
begin
Inc(A, Length(Start));
if Ende = EmptyStr then
B := Length(S)
else
B := Pos(Ende, S, A);
if B > 0 then
begin
Result := Copy(S, A, B - A);
Position := Succ(B);
end;
end;
end;
end;
function CopyFromPosToPos(S: string; Start: string; Ende: string): string; overload;
var
Posi: integer = 1;
begin
Result := CopyFromPosToPos(S, Start, Ende, Posi);
end;
Damit lassen sich ohne Hirnakrobatik z.B. alle Links eines HTML Dokuments ausgeben:
Code: Alles auswählen
var
Posi: integer;
Res: string;
begin
Posi := 1;
repeat
Res:=CopyFromPosToPos(Memo1.Text, 'href="', '"', Posi);
if Posi > 0 then Memo1.Lines.add(Res);
until Posi = -1;
end;
Was haltet ihr davon, diesen Vorschlag im Bugtracker zu machen?
Gibt es das schon oder findet ihr das Überflüssig?
Ja, ich weiss, RegEx, aber das ist Vielen nicht ganz geheuer.
Es gibt bestimmt auch andere Packages, die solche Funktionen mitbringen, aber ich finde diese Funktionalität sollte immer greifbar sein.