我的一个导出表里的数据为TXT,按一定格式,,其它的都对了,就是在判断身份证号字段时身份证是15位的后面就没有三个空格符来占位,如果身份证为15位的,则要再加三个空格符凑齐18位,因身份证最长是18位,有的身份证是15位的,也就是加一个判断语句,如果身份证号不满18位,用3个空格占位。就这意思吧,你添加的代码用红色表示出来哦,,测试运行立即给分,导出按钮代码如下
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
var
  tfile: TextFile;
  i, j, c: Integer;
  zh,kh,je: string;begin if adoquery1.recordcount=0 then
begin
 MessageBox(GetActiveWindow(), '没有数据可导出,导出失败!', '提示', MB_OK +  MB_ICONWARNING);
  abort
  end
   elseqh.SQL.clear;
qh.Close;
qh.sql.add('select sum(金额) from cz ');
qh.Open;   ShowMessage('本次代发合计人数:'+IntToStr(adoquery1.RecordCount)   );
   ShowMessage('本次代发合计金额:'+ qh.Fields[0].AsString );   
CreateDirectory('d:\存折代发数据',nil);
assignfile(tfile,'d:\存折代发数据\czdata.txt');
rewrite(tfile); begin
ADOQuery1.first;adoquery1.SQL.clear;
adoquery1.Close;
adoquery1.SQL.Add('select * from cz');
adoquery1.open;    for   i:=1   to   ADOQuery1.recordcount   do
   begin  Write(tfile, Format('%.5d', [i]) + ADOQuery1.FieldByName('id').AsString);
      //导出编号
      Write(tfile, Format('%-16s', [ADOQuery1.FieldByName('姓名').AsString]));
      //导出姓名      // 账号
      zh := ADOQuery1.FieldByName('帐号').AsString;
      if zh = '' then
        Write(tfile, DupeString(' ', 20))
      else
        Write(tfile, zh);      // 金额
      je := ADOQuery1.FieldByName('金额').AsString;
      j := Pos('.', je);
      if j > 0 then
      begin
        c := Length(je) - j;
        je := StringReplace(je, '.', '', [rfReplaceAll]);
        if c = 1 then
          je := je + '0'
        else if c > 2 then
          je := Copy(je, 1, Length(je) - (c-2)) + '.' + RightStr(je, (c-2));
      end;
      if (Pos('.', je) = 0) and (Length(inttostr(strtoint(je))) < 5) then
        je := Format('%10s00', [je])
      else
        je := Format('%12s', [je]);
      je := StringReplace(je, ' ', '0', [rfReplaceAll]);  //用0占位空格
      Write(tfile, je);      // 身份证号
      kh := ADOQuery1.FieldByName('身份证号').AsString;
      if kh = '' then
        Writeln(tfile, DupeString(' ', 18))
      else
        Writeln(tfile, kh); //导出身份证
      ADOQuery1.Next;
   end;
    end;
    closefile(tfile);
     MessageBox(GetActiveWindow(), '存折数据处理完毕,已保存到D盘存折代发数据文件夹,文件名为:czdata.txt', '导出提醒', MB_OK +
        MB_ICONWARNING);
 end;希望各位大侠行行好。

解决方案 »

  1.   

    S // 身份证号码,加入代码if Length(Trim(S))=15 then S:=S+'   ';
      

  2.   

      // 身份证号
      kh := ADOQuery1.FieldByName('身份证号').AsString;
        
      j := Length(kh);
      if j < 18 then
      for i := 1 to 18 - j do
        kh := kh + ' ';

      if kh = '' then
        Writeln(tfile, DupeString(' ', 18))
      else
        Writeln(tfile, kh); //导出身份证
      

  3.   

    建议
    将这个数据结构定义成“记录集”方式即可
    再根据“记录集”方式获取相关变量信息即可
    下面给你一个参考
      TMyDB = record
        Name: array [0..19] of char;
        Deleted: Boolean;
        PhotoSize: Cardinal;
        PhotoOffset: Cardinal;
      end;
      

  4.   

    if kh = '' then
      Writeln(tfile, DupeString(' ', 18))
    else
      Writeln(tfile, kh); //导出身份证 ==>
    for i:=length(kh)+1 to 18 do
      kh := kh + ' ';
    Writeln(tfile, kh); //导出身份证