首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

诸位大侠们啊这个分都不要,算是白进来了,求教啊

2013-03-01 
各位大侠们啊,这个分都不要,算是白进来了,求教啊!我的一个导出表里的数据为TXT,按一定格式,,其它的都对了,

各位大侠们啊,这个分都不要,算是白进来了,求教啊!
我的一个导出表里的数据为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
   else

qh.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;





希望各位大侠行行好。
[解决办法]
S // 身份证号码,加入代码

if Length(Trim(S))=15 then S:=S+'   ';
[解决办法]
  // 身份证号
  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); //导出身份证
[解决办法]
建议
将这个数据结构定义成“记录集”方式即可
再根据“记录集”方式获取相关变量信息即可
下面给你一个参考
  TMyDB = record
    Name: array [0..19] of char;
    Deleted: Boolean;
    PhotoSize: Cardinal;
    PhotoOffset: Cardinal;
  end;
[解决办法]
if kh = '' then
  Writeln(tfile, DupeString(' ', 18))
else
  Writeln(tfile, kh); //导出身份证 

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

热点排行