想对齐输出,找不到FORMAT应如何解决方法,于是用下面循环,却没想到两行的每个字串还是不能对齐(对应字串长度不等,但决没超出10的范围。)
不知错在哪,用FORMAT能解决吗?或者有更好的方法?
      for iLoop := Length(sSingle) to 10 do
      begin
        sSingle := sSingle + #32;
      end;

解决方案 »

  1.   

    不是回车,是空格,我用‘ ’出不行,加这些是为了对齐呀,如
    a和ab变成如
    a''''''  和
    ab''''   对齐  :)好像没对齐,怎么弄呢?
      

  2.   

    //from
    http://zswang.51.net/document/zsdoc02.txt━━━━━━━━━━━━━━━━━━━━━
    首部  function Format(const Format: string; const Args: array of const): string; $[SysUtils.pas
    功能  返回按指定方式格式化一个数组常量的字符形式
    说明  这个函数是我在Delphi中用得最多的函数,现在就列举几个例子给你个直观的理解
    "%" [索引 ":"] ["-"] [宽度] ["." 摘要] 类型
    Format('x=%d', [12]); //'x=12' //最普通
    Format('x=%3d', [12]); //'x= 12' //指定宽度
    Format('x=%f', [12.0]); //'x=12.00' //浮点数
    Format('x=%.3f', [12.0]); //'x=12.000' //指定小数
    Format('x=%.*f', [5, 12.0]); //'x=12.00000' //动态配置
    Format('x=%.5d', [12]); //'x=00012' //前面补充0
    Format('x=%.5x', [12]); //'x=0000C' //十六进制
    Format('x=%1:d%0:d', [12, 13]); //'x=1312' //使用索引
    Format('x=%p', [nil]); //'x=00000000' //指针
    Format('x=%1.1e', [12.0]); //'x=1.2E+001' //科学记数法
    Format('x=%%', []); //'x=%' //得到"%"
    S := Format('%s%d', [S, I]); //S := S + StrToInt(I); //连接字符串
    参考  proceduer SysUtils.FmtStr
    例子  Edit1.Text := Format(Edit2.Text, [StrToFloatDef(Edit.3.Text, 0)]);
    ━━━━━━━━━━━━━━━━━━━━━
    首部  procedure FmtStr(var Result: string; const Format: string; const Args: array of const); $[SysUtils.pas
    功能  按指定方式格式化一个数组常量的字符形式返回
    说明  <参见Format>
    参考  function SysUtils.FormatBuf;function System.Length;function System.SetLength
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  function StrFmt(Buffer, Format: PChar; const Args: array of const): PChar; $[SysUtils.pas
    功能  返回按指定方式格式化一个数组常量的字符指针形式
    说明  如果Buffer和Format其中只要有一个为nil则返回nil
    参考  function SysUtils.FormatBuf
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  function StrLFmt(Buffer: PChar; MaxBufLen: Cardinal; Format: PChar; const Args: array of const): PChar; $[SysUtils.pas
    功能  返回按指定方式和长度格式化一个数组常量的字符指针形式
    说明  StrLFmt(vBuffer, 6, '%d|12345', [1024]) = '1024|1';
    参考  function SysUtils.FormatBuf
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  function FormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const): Cardinal; $[SysUtils.pas
    功能  返回按指定方式格式化一个数组常量到缓冲区Buffer中
    说明  <NULL>
    参考  <NULL>
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  function WideFormat(const Format: WideString; const Args: array of const): WideString; $[SysUtils.pas
    功能  返回按指定方式格式化一个数组常量的多字节字符形式
    说明  <NULL>
    参考  procedure SysUtils.WideFmtStr
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  procedure WideFmtStr(var Result: WideString; const Format: WideString; const Args: array of const); $[SysUtils.pas
    功能  按指定方式格式化一个数组常量的多字节字符形式返回
    说明  <NULL>
    参考  function SysUtils.WideFormatBuf
    例子  <参见Format>
    ━━━━━━━━━━━━━━━━━━━━━
    首部  function WideFormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const): Cardinal; $[SysUtils.pas
    功能  返回按指定方式格式化一个数组常量到缓冲区Buffer中
    说明  <NULL>
    参考  <NULL>
    例子  <参见Format>
      

  3.   

    for iLoop := Length(sSingle) to 10 do
          begin
            sSingle := sSingle + #32;
          end;有没有发现,在你循环的过程中,Length(sSingle)一直在变
    两种方法:1. 用一个integer变量记下Length(sSingle)
            2.
          while Length(sSingle)<10 do
          begin
            sSingle := sSingle + #32;
          end;
      

  4.   

    while Length(sSingle)<10 do
          begin
            sSingle := sSingle + #32;
          end;
    或者
          while Length(sSingle)<16 do
          begin
            sSingle := sSingle + #32;
          end;
    或者
          while Length(sSingle)<20 do
          begin
            sSingle := sSingle + #32;
          end;
    再不行,就请你把输出部分代码贴出来
      

  5.   

    真的不行
      for iLoop1 := 1 to iLineNum do
      begin
        sLineTemp := ' ';
        for iLoop2 := 1 to iRowNum do
        begin
          inc(iCurrentNum);
          sSingle := FloatToStr(aryvalue[icurrentNum]);
          for iLoop3 := Length(sSingle) to (imaxLength+5) do
          begin
            if iLoop2 <> iRowNum then
              sSingle := sSingle + ' ';
          end;
          sLineTemp := sLineTemp + sSingle
        end;
        memoNew.Lines.Add(sLineTemp);
      end;
      memoNew.Text := memoNew.Text + #8;
      

  6.   

    仔细查看一下FORMAT,功能强大
    s:=format('%15s',s);//左对齐,不足补 空格
      

  7.   

    sLineTemp := sLineTemp + sSingle
    非当前行前面有空格,而当前行没有空格//如果还不行的话,把你的要求给我,我给你写个
      

  8.   

    我想可能是显示的问题,大家试试这个:
    var
      s1,s2,s3,s4:string;
    begin
      s1 := 'abc';
      s2 := 'dfddsdf';
      s3 := 'a';
      s1 := Format('%10s',[s1]);
      s2 := Format('%10s',[s2]);
      s1 := s1 + s2;
      memo1.Text := s1;
      s3 := Format('%10s',[s3]);
      s4 := 'dfsdfsf';
      s4 := Format('%10s',[s4]);
      s3 := s3 + s4;
      memo1.Lines.Add(s3);
    end;
    查一下那些空格,都是正确的,但显示的就是不能对齐。真他妈郁闷
      

  9.   

    注,字符集改成GB2312_CHARSET 就OK了,我试一下原来的代码先
      

  10.   

    哈哈哈,OK了,不论是我原先写的还是用FORMAT都安然无恙,就是字符集问题了,但#8在GB2312_CHARSET下可不是删除一个字符了。大家接分。
      

  11.   

    英文TRUETYPE字符集字宽不等。