procedure TForm1.FormCreate(Sender: TObject); var S, S2: string; N: Integer; B: Boolean; begin S := 'fcode=''aaa'' and fname=''张三'' or fss=''ddljf'''; S2 := ''; repeat N := Pos('and ', S); if N = 0 then begin N := Pos('or ', S); if N = 0 then Break else begin B := False; S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' or '; Delete(S, 1, N + 2); end end else begin B := True; S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' and '; Delete(S, 1, N + 3); end until False; S2 := S2 + 'a.' + Trim(S); ShowMessage(S2); end;
这问题怎么感觉和字符串一毛钱关系也没有? 实例化一个类a a.fcode='aaa' and a.fname='张三'
fcode='aaa' and fname='张三'....可能有多个条件组合,我想转成下面的格式。a.fcode='aaa' and a.fname='张三'stringreplace文本替换不行?
楼主的意思是要在查询语句里面的字段名前面加上表的别名。 ...... function Test(ABM:string;AStr:string):string; //ABM表示别名 var i,iLen,k,j,iLen2:Integer; begin iLen:=length(AStr); iLen2:=length(ABM+'.'); k:=1; i:=1; while i<=iLen do begin if AStr[i]='=' then begin for j:=i-1 downto k do if (AStr[j]=' ') or (j=1) then begin if j>1 then Insert(ABM+'.',AStr,j+1) else Insert(ABM+'.',AStr,j); inc(i,iLen2); inc(iLen,iLen2); k:=i+1; break; end; end; inc(i); end; result:=AStr; end;procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text:='fcode=''aaa'' and fname=''张三'''; edit2.Text:=Test('a',edit1.Text); end;
fname=:'aaa'
var
S, S2: string;
N: Integer;
B: Boolean;
begin
S := 'fcode=''aaa'' and fname=''张三'' or fss=''ddljf''';
S2 := ''; repeat
N := Pos('and ', S);
if N = 0 then
begin
N := Pos('or ', S);
if N = 0 then Break else
begin
B := False;
S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' or ';
Delete(S, 1, N + 2);
end
end
else
begin
B := True;
S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' and ';
Delete(S, 1, N + 3);
end
until False; S2 := S2 + 'a.' + Trim(S); ShowMessage(S2);
end;
实例化一个类a a.fcode='aaa' and a.fname='张三'
......
function Test(ABM:string;AStr:string):string;
//ABM表示别名
var
i,iLen,k,j,iLen2:Integer;
begin
iLen:=length(AStr);
iLen2:=length(ABM+'.');
k:=1;
i:=1;
while i<=iLen do
begin
if AStr[i]='=' then
begin
for j:=i-1 downto k do
if (AStr[j]=' ') or (j=1) then
begin
if j>1 then
Insert(ABM+'.',AStr,j+1)
else
Insert(ABM+'.',AStr,j); inc(i,iLen2);
inc(iLen,iLen2);
k:=i+1;
break;
end;
end; inc(i);
end; result:=AStr;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:='fcode=''aaa'' and fname=''张三''';
edit2.Text:=Test('a',edit1.Text);
end;