想对齐输出,找不到FORMAT应如何解决方法,于是用下面循环,却没想到两行的每个字串还是不能对齐(对应字串长度不等,但决没超出10的范围。)
不知错在哪,用FORMAT能解决吗?或者有更好的方法?
for iLoop := Length(sSingle) to 10 do
begin
sSingle := sSingle + #32;
end;
不知错在哪,用FORMAT能解决吗?或者有更好的方法?
for iLoop := Length(sSingle) to 10 do
begin
sSingle := sSingle + #32;
end;
a和ab变成如
a'''''' 和
ab'''' 对齐 :)好像没对齐,怎么弄呢?
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>
begin
sSingle := sSingle + #32;
end;有没有发现,在你循环的过程中,Length(sSingle)一直在变
两种方法:1. 用一个integer变量记下Length(sSingle)
2.
while Length(sSingle)<10 do
begin
sSingle := sSingle + #32;
end;
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;
再不行,就请你把输出部分代码贴出来
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;
s:=format('%15s',s);//左对齐,不足补 空格
非当前行前面有空格,而当前行没有空格//如果还不行的话,把你的要求给我,我给你写个
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;
查一下那些空格,都是正确的,但显示的就是不能对齐。真他妈郁闷