haitao:
元器件编号,如C1,C2,...,C23,C24, R1,R2,...,R78,R88,...,R156,R157,正确的排序比较函数该怎么写呢?
[阅读: 360] 2008-02-26 06:05:49
元器件编号,如C1,C2,...,C23,C24, R1,R2,...,R78,R88,...,R156,R157,正确的排序比较函数该怎么写呢?
即C9是小于C12
用delphi写的了一个,感觉很冗长:
for i := 1 to length(bom1s[l].ref) do
Begin
if i>length(bom1s[r].ref) then
Begin
result:=1;
exit;
End;
if bom1s[l].ref[i] in ['0'..'9'] then
if bom1s[r].ref[i] in ['0'..'9'] then
Begin
a:=strtointdef(copy(bom1s[l].ref,i,100),cerr);
b:=strtointdef(copy(bom1s[r].ref,i,100),cerr);
if (a=cerr) or (b=cerr) then
Begin
result:=AnsiCompareText(bom1s[l].ref,bom1s[r].ref);
exit;
End;
if a>b then
result:=1
else if a<b then
result:=-1
else
result:=0;
exit;
End
else
Begin
result:=AnsiCompareText(bom1s[l].ref,bom1s[r].ref);
exit;
End
else
if bom1s[r].ref[i] in ['0'..'9'] then
Begin
result:=AnsiCompareText(bom1s[l].ref,bom1s[r].ref);
exit;
End
else
Begin
if bom1s[r].ref[i]=bom1s[l].ref[i] then
Continue;
if bom1s[r].ref[i]>bom1s[l].ref[i] then
result:=1
else
result:=-1;
exit;
End;
End;
if length(bom1s[l].ref)<length(bom1s[r].ref) then
result:=-1
else
result:=0;