我把一个表格生成了文本文件,发生了如下情况
100     200     200     300       ddw          555           200
101     201     201     301       flyincool          558           201
102     202     202     302       94newbe          559           202不知如何解决,请大家帮个忙

解决方案 »

  1.   

    动态加中间的空格:
    xx(常数)-Length(yy(要显示的数据))
      

  2.   

    我的代码:楼上的请明示
    Begin
     if savedialog1.execute then
      assignfile(DealedFile,savedialog1.filename);
      rewrite(DealedFile);
      Query1.Close();
      Query1.SQL.Clear();
      Query1.SQL.Add('select * from commit_form'); //Query1.
    Query1.Open();
    While not Query1.eof do
    begin   //OneLine := Query1.Fields[0].AsString;
       OneLine := Query1.Fields[0].AsString +'     '+ Query1.Fields[1].AsString +'     '+ Query1.Fields[2].AsString+'     '
                  +Query1.Fields[3].AsString +'       '+ Query1.Fields[4].AsString +'          '+ Query1.Fields[5].AsString+'           '+Query1.Fields[2].AsString;
       writeln(DealedFile,OneLine);         Query1.Next();
            end;
            CloseFile(DealedFile);
    End;
      

  3.   

    OneLine := Query1.Fields[0].AsString +'     '+ Query1.Fields[1].AsString +'     '+ Query1.Fields[2].AsString+'     '
                  +Query1.Fields[3].AsString +'       '+ Query1.Fields[4].AsString +'          '+ Query1.Fields[5].AsString+'           '+Query1.Fields[2].AsString;中间所有的'     '改成动态的
    可以写一个函数,参数为Query1.Fields[i].AsString,
    返回值为x个空格,x:=8-Length(Query1.Fields[i].AsString);
    不明白我写代码给你。
    不过如果你要显示的数据多于8个字符你准比怎么显示?空一格?还是怎么样?
      

  4.   

    楼上的,我的表结构是
    create table ts_info(              
    area_code                varchar(7)   null,
    acct_id                  number(8)    not null,
    acct_seq_nbr             number(3)    not null,
    acc_nbr                  varchar(16)  null,
    name                     varchar(50)  null,
    billing_cycle_id         number(6)    not null,
    charge                   number(10)   not null,
    capi_charge              varchar(100) null,
    bank_acct                varchar(30)  not null,
    bank_name                varchar(60)  not null,
    ts_time                  date         not null,
    state                    char(3)      null,  primary key (acct_id,acct_seq_nbr,billing_cycle_id));字符不够拿空格找齐,写个代码明视一下吧,
      

  5.   

    问题在于你准备用几个空格找齐?你的capi_charge字段最大长度为100,如果正好100个字符,你准备怎么显示?也在同一行么?
    这么说吧,你希望所有的列靠左对齐是吧?那么每一列的宽度就等于“数据长度+x空格”
    现在只要保证每一行中的各个列宽度一致就行了,
    我推荐一个方法,先查出各列数据的最大长度,然后+5,作为该列的宽度,
    然后每个空格数就等于这个宽度-数据长度,明白吧?
    比较麻烦,但是好像没有更好的方法了。
    算出每列的宽度,存到一个数组中,
    然后用一个双重循环显示,
    逻辑上不难的,你仔细想想。
      

  6.   

    楼主的结果是Tab惹的祸,我以前遇到过,没解决
      

  7.   

    你可以先用空格填充字符串oneline,然后规定每个字段的最大的长度,规定好每个字段的开始处,往里添充替换就可以了!
      

  8.   

    const
       start:array[0..7] of integer=(0,10,20,30,40,50,60,70);
    var
      m,n,i:integer;
      oneline:array[0..100]of char;
      tempstr:string;
    begin
      m:=0;
      FillChar(oneline,sizeof(oneline),ord(' ')) ;
      for i:=0 to 6 do
      begin
         tempstr:=table1.fields[i].asstring  ;
        for n:=0 to length(tempstr)-1 do
        begin
          oneline[start[m]+n]:=tempstr[n+1];
        end;
        inc(m);
      end;
      //showmessage(oneline);
      memo1.Lines.Add(oneline);
      这样是否可以?
      

  9.   

    可以用format函数,来格式一下