下面两个功能相同的函数代码,哪个在运行效率上更高?(25分)

  • 主题发起人 主题发起人 delhpi
  • 开始时间 开始时间
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
对于取得分割字符串中的特定部分,下面两个函数代码,哪个在运行效率上更高?
比如有一个二维表格式的文本文件,以3000行为例,每行的各个字段用 逗号分割,各个字段的内容长度大约在20个字左右,一行相当于一条记录,每行大约10个字段。
我要将其加载到stringgrid中时,要用函数取得一行的每个字段,以便赋值给cells[col,row]。

第二个是,我刚学D几天时复制别人的,当时是如获至宝。
第一个是,我学了一个月时间后,就是最近,自己写的,但不知道效率如何?
请大家看看,究竟该用哪个,哪个效率高?
//getonestr('你,我,他',0)
//='你'
function GetOnestr(Sourcestr: widestring
PartIndex: integer): widestring;
var
strlist: tstringlist;
i: integer;
begin
result := '';
strlist := tstringlist.Create;
try
strlist.Delimiter := ',';
strlist.DelimitedText := sourcestr;
if (partindex <= strlist.Count - 1) and (partindex >= 0) then
result := strlist[partindex];
finally
strlist.Free;
end

end;
////////////////
//fngetpartstring('你,我,他',1)
//=你
function FnGetPartString(aSource: string
nPart: Integer
aSeparator: string = ','): string;
var
lnfor: integer;
lsstr: string;
begin
lnfor := Pos(aSeparator, aSource);
if (lnfor = 0) then
begin
Result := aSource;
exit;
end;
if nPart > 1 then
begin
aSource := Copy(aSource, lnfor + 1, length(aSource));
lsstr := FnGetPartString(aSource, nPart - 1, aSeparator);
end
else if nPart = 1 then
lsstr := copy(aSource, 1, lnfor - 1);

result := lsstr;
end;


富翁名称: delhpi
专 家 分: 6
可用积分: 30
给25分。
 
应该是第一种效率高些。因为delphi中copy函数挺慢。能不用,尽量不用。
 
首先第一种比较简单, 易读。

效率需要你测试一下他们分别运行的时间。
 
TstringList提供的切割字符串当然比自己写的要好喽
 
都已经提供了源串了,还搞TStringList,再分配,再计算,不然就Copy...无语

function Extract(const ASource: string
AIndex: Integer
ASepChar: Char): string;
var
Src, S: PChar;
Len, Index: Integer;
begin
Src := PChar(ASource);
Len := Length(ASource);

Index := 0;
while Len > 0 do
begin
S := Src;
while not ((Src^ = ASepChar) or (Len <= 0)) do
begin
Inc(Src);
Dec(Len);
end;

if Index = AIndex then
begin
SetString(Result, S, Src - S);
Exit;
end;
Inc(Src);
Dec(Len);
Inc(Index);
end;
//SetString(Result, S, Src - S)
end;
 
gettickcount算下时间,证明一切
 
========
errorcode
=========
非常感谢您的指点。如获至宝*N。
 
后退
顶部