DELPHI导出TXT判断字段值长度后再输出
导出按钮代码:
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
var
tfile: TextFile;
i: Integer;
begin
assignfile(tfile,'d:\11.txt');
rewrite(tfile);
begin
ADOQuery1.first;
for i:=1 to ADOQuery1.recordcount do
begin
writeln(tfile, Format('%.5d',[i])+ADOQuery1.fieldbyname('id').AsString + ADOQuery1.fieldbyname('姓名').AsString + ' ' + ADOQuery1.fieldbyname('帐号').AsString+ '00000000'+ StringReplace(ADOQuery1.fieldbyname('金额').AsString,'.','',[rfReplaceAll]) + ADOQuery1.fieldbyname('身份证号').AsString);
ADOQuery1.next;
end;
end;
closefile(tfile);
MessageBox(GetActiveWindow(), '数据处理完毕,已保存到D盘,文件名为:dfgz.txt', '导出提醒', MB_OK +
MB_ICONWARNING);
end;
我现在想判断ADOQuery1.fieldbyname('姓名').AsString 姓名字段的值,如果是两个字的名字后面就加10个空格字符,如果是三个字的名字就加12个空格,如果是四个字的就加15个空格,这段代码该如何改,急救啊,各位,谢了
最终要达到如下格式,要后面的帐号要对齐,前面的空格则根据字的多少来补充
00255伊来昌 68851209012000151935000000002185630121197404052816
00256伊正权 68851209012000151946000000004370630121193911162819
00257陈录 688512090120001519570000003146.4630121196305242812
00258陈启 68851209012000151968000000004807630121196412022815
[解决办法]
function PrintSpace(iCount:Integer);//增加一个函数,作用为输出iCount个空格
var
i:Integer;
begin
Result:='';
for i:=1 to iCount do
Result:=Result+' ';
end;
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
const
iSpaceCount=20;//假设中间总共有20个空格的位置
var
tfile: TextFile;
i: Integer;
sSpace:string;//空格字符串
begin
assignfile(tfile,'d:\11.txt');
rewrite(tfile);
begin
ADOQuery1.first;
for i:=1 to ADOQuery1.recordcount do
begin
sSpace:=PrintSpace(iSpaceCount-Length(Format('%.5d',[i])+ADOQuery1.fieldbyname('id').AsString + ADOQuery1.fieldbyname('姓名').AsString));
writeln(tfile, Format('%.5d',[i])+ADOQuery1.fieldbyname('id').AsString + ADOQuery1.fieldbyname('姓名').AsString +sSpace+ ADOQuery1.fieldbyname('帐号').AsString+ '00000000'+ StringReplace(ADOQuery1.fieldbyname('金额').AsString,'.','',[rfReplaceAll]) + ADOQuery1.fieldbyname('身份证号').AsString);
ADOQuery1.next;
end;
end;
closefile(tfile);
MessageBox(GetActiveWindow(), '数据处理完毕,已保存到D盘,文件名为:dfgz.txt', '导出提醒', MB_OK +
MB_ICONWARNING);
end;
未经测试,应该这是这样。PS:上一贴你还没结分