function函数返回值问题,好奇怪,求解答?
今天碰到一个奇怪的问题如下:
我有一个文本文件,格式如下:
2.txt内容:
1111;2222
3333;4444
5555;6666
7777;8888
好了,我想把以上内容分割开来,如1111 2222
先自定义了一个函数
function Tform1.showdata(a:string):string;
var
s1:Tstringlist;
i:Integer;
begin
Result:=''; //不加这句,会重复生成字符串
s1:=TStringList.Create;
s1.Delimiter:=';';
s1.DelimitedText:=a;
for i:=0 to s1.Count-1 do
begin
result:=Result+s1.Strings[i]+' ';
end;
FreeAndNil(s1);
end;
然后调用,把memo1载入的内容,处理后显示到memo2中
procedure TForm1.btn3Click(Sender: TObject);
var
i:Integer;
begin
mmo2.Clear;
mmo1.Lines.Clear;
mmo1.Lines.LoadFromFile('2.txt');
for i:=0 to mmo1.Lines.Count-1 do
begin
mmo2.Lines.Add(showdata(mmo1.Lines.Strings[i]));
end;
end;
执行结果,好了问题来了.
showdata函数中如果没有result:='';这句,会变成memo2中的内容会重复生成,如下:
1111 2222
1111 2222 3333 4444
1111 2222 3333 4444 5555 6666
1111 2222 3333 4444 5555 6666 7777 8888
加上result:='';结果是正常的,如下:
1111 2222
3333 4444
5555 6666
7777 8888
开始怎么都找不到原因,想了半天后来加上就可以了,请问原因是什么?
是不是function的返回值在程序中是全局的?每次外部调用不会清除上次的值?