刚刚写的一个分解字段名的函数,让各位见笑了,如果有更好的算法,希望共同交流
// 分解用 ',' 分开的多个部分的字段名
// 形如 : Field1, [Field2],[Fiel d3],[Fie, ld]
// 结果 : FIeld1 [Field2] [Fiel d3] [Fie, ld] 四个部分
// 参数 : List = 存放需要分解的串,及结果串(每行一个部分)
// 返回 : True/False 表示 成功/失败
function MakeFieldList(List : TStringList) : Boolean;
function MakeFieldList(List : TStringList) : Boolean;
var
c : Char;
FieldList : string;
nPos, nLoop, nLen, nStart : Integer;
begin
FieldList := List.Text;
List.Clear();
nLen := Length(FieldList);
nLoop := 1;
nStart := nLoop;
while (nLoop < nLen) do begin
c := FieldList[nLoop];
// 进入 [..] 部分
if (c = '[') then begin
// 直接找结束部分
nPos := PosEx(']', FieldList, nLoop + 1);
// 没有找到对应的 [..] 结束
if (nPos = 0) then begin
List.Add(Copy(FieldList, nLoop, nLen - nLoop));
exit;
end;
nLoop := nPos;
// 处理用 ',' 分开的每个部分
end else if (c = ',') then begin
List.Add(Copy(FieldList, nStart, nLoop - nStart));
nStart := nLoop + 1;
end;
inc(nLoop, 1);
end;
// 如果退出循环,还有未处理的部分
if (nStart < nLoop) then
List.Add(Copy(FieldList, nStart, nLoop - nStart));
Result := True;
end;
刚刚写的一个分解字段名的函数,让各位见笑了,如果有更好的算法,希望共同交流 : QQ 2195013