请问:这样的函数要如何写?多谢

请教:各位大哥这样的函数要怎么写?谢谢!
请教是这样的:
有字符串   'as|sdf|dfgf|gfhg '
我需要得到的是  
as
sdf
dfgf
gfhg

这样,是不是要求   函数返回一个字符串数组啊?

function       ParseString1(s:String):Array   of   string;

//*****************************************************************找字符串|
function       ParseString1(s:String):array   of   string;
var
            i:integer;//   字符串   ##   的开始位置
            h:intger;
            ss:array   of   string;
begin
            result:=0;
            while     True       do
                            begin
                                          i:=pos( '| ',s);
                                          if         i <=0       then       break;
                                          j:=j+1;
                                          temp:=copy(s,1,i-1);
                                          ss[j]:=temp;
                                          delete(s,1,i);
                                          result:=ss[j];
                            end;
//*****************************************************************找字符串   |


可是我这样写,编译都通不过?

我是错在哪里呢?

谢谢!


------解决方案--------------------
如果要写成函数就这样:

procedure ChgStr(const S : string; const C : Char; var L : TStringList);
begin
L.Text := StringReplace(S, C, #10, [rfReplaceAll]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
L : TStringList;
I : integer;
begin
L := TStringList.Create;
ChgStr( 'as|sdf|dfgf|gfhg ', '| ', L);
for I := 0 to L.Count-1 do
showmessage(L[I]);
L.Free;
end;

实际上不用写成函数。只要会用StringReplace了,你就明白了。
------解决方案--------------------
注意在pascal中
a: array[0..1] of string;
b: array[0..1] of string;
c: array of string;
d: array of string;
a和b、c和d被编译器理解为不同的类型
不能执行
a := b;
c := d;

就是说函数不能返回array of string;这将导致没有任何类型可以匹配

所以得先声明一个自定义类型来处理
type
TArrayString = array of string;

function ParseString1(s: string): TArrayString;
var
i: Integer;// 字符串 ## 的开始位置
j: Integer;
begin
Result := nil;
j := 0;
i := Pos( '| ', s);