请教怎么在一个字符串中把一个子串都找到,并定位,统计个数

请问如何在一个字符串中把一个子串都找到,并定位,统计个数
比如有字符串: '123abc456abc7890abc ',把其中的 'abc '子串都找到,把它的位置存在数组point[]中。
谢谢。

------解决方案--------------------
不好意思,我能想到的就是找一个就截一下,只到找完。
期待高手出现!
------解决方案--------------------
uses StrUtils;

function SubStringCount(sSub, sData: String): Integer;
var
iPos : Integer;
begin
Result := 0;
iPos := 1;
repeat
iPos := PosEx(sSub, sData, iPos);
if iPos > 0 then
begin
inc (Result);
iPos := iPos + Length(sSub);
end;
until iPos <= 0;
end;

procedure SubStringPosition(sSub, sData: String; var AResult: array of Integer);
var
iPos : Integer;
iCount : Integer;
begin
iCount := 0;
iPos := 1;
repeat
iPos := PosEx(sSub, sData, iPos);
if iPos > 0 then
begin
AResult[iCount] := iPos;
inc (iCount);
iPos := iPos + Length(sSub);
end;
until iPos <= 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
iResult : array of Integer;
iLoop : Integer;
begin
SetLength (iResult, SubStringCount( 'abc ', '123abc456abc7890abc '));
SubStringPosition( 'abc ', '123abc456abc7890abc ', iResult);
for iLoop := 0 to Length(iResult) - 1 do
ShowMessage (Format( '第%d次出现的位置为: %d ', [iLoop + 1, iResult[iLoop]]));
end;

------解决方案--------------------
给你个我自己写的函数!不一定简单,仅供参考;
{-------------------------------------------------------
函数说明:获取字符串中子串的个数;
--------------------}
function SubStrNumber(const SubStr, str: string): Integer;
var
tempStr: string;
begin
Result := 0;
tempStr := str;
while Pos(SubStr, tempStr) <> 0 do
begin
Inc(Result);
Delete(tempStr, 1, Pos(SubStr, tempStr) + Length(SubStr) - 1);
end;
end;

{---------------------
函数说明:获取每个子串在字符串中的位置,并保存到相应的数组中;
----------------------}
procedure GetSubStringPosToArray(const SubStr, str: string; var point: array of Integer);
var
tempStr: string;
i, tempPos: Integer;
begin
//tempStr := Copy(str, 0, Length(str));
tempStr := str;
i := 1;
tempPos := 0; //用来保存子串前面字符串的长度;
point[0] := 0; //point[0]特殊标志位,用来存放子串的个数;
while Pos(SubStr, tempStr) <> 0 do
begin
point[i] := Pos(SubStr, tempStr) + tempPos;
tempPos := point[i] + Length(SubStr);
point[0] := i;
Inc(i);
Delete(tempStr, 1, Pos(SubStr, tempStr) + Length(SubStr));
end;
end;