format('%s%s%s..',[a[1],a[2]..a[n]]),当a[n]为动态数组时,该如何添加?(18分)

  • 主题发起人 主题发起人 swns
  • 开始时间 开始时间
S

swns

Unregistered / Unconfirmed
GUEST, unregistred user!
format('%s%s%s..',[a[1],a[2]..a[n]])
当a[n]为动态数组时,该如何添加。
 
format函数的第二个参数是array of const 等价于Array of TVarRec (该类型在system单元中声明),给个例子

procedure TForm1.Button1Click(Sender: TObject);
var TempArray:Array of TVarRec;
ResultString,SS:string;
i:integer;
begin
setLength(TempArray,2);
SS:='aa';
i:=99;
TempArray[0].VAnsiString:=Pointer(ss);
TempArray[0].VType:=vtAnsiString;
TempArray[1].VInteger:=i;
TempArray[1].VType:=vtInteger;
ResultString:=format('%s%d',TempArray);
showmessage(ResultString);
end;
 
var
i: integer ;
ss: string ;

ss:='' ;
for i:=1 to n
ss:= ss+format('%s',[a) ;
 
用循环分开输出吧
 
hbwin2001
但是format函数前面的第一个参数“%s”又该如应相应增加到与第二个参数相同的数目呢?
 
请注意函数的声明:
function Format(const Format: string
const Args: array of const): string;
后一个参数本身就是个动态数组,因此直接把a传递即可。
前一个参数,一个字符串而已,根据a的长度一个循环就构造出来了!
 
array of const 是动态开放数据,不能传一般的数组的吧,不信你试试。

前面的format字符串应该能根据你的数组来构建
 
high(a),来确定一维的个数 +1 是你要创建%s的个数。
哦,不行,问题是数组不能动态创建。
也可以,数组肯定是同一类型,要么数字,要么文本,也可以创建串的哦。
 
直接传A进去就行
 
问题基本已经解决,直接传a肯定不行,我用n种方法试过n遍,还是hbwin2001的方法行得通,但是还有一个小小问题,就是ss是string类型,但是在这里,
TempArray[0].VAnsiString:=Pointer(ss);
TempArray[0].VType:=vtAnsiString;(为什么不能用vtstring),我看过system,里面有vtstring这一个参数,我也试过,用vtstring时输出的内容不是ss,为什么?
 
vtstring 是pshortstring类型的,所以可以写成这样:

procedure TForm1.Button1Click(Sender: TObject);
var TempArray:Array of TVarRec;
ResultString:string;
i:integer;
ss:shortstring;
begin
setLength(TempArray,2);
SS:='aa';
i:=99;
TempArray[0].VString:=@ss;
TempArray[0].VType:=vtString;
TempArray[1].VInteger:=i;
TempArray[1].VType:=vtInteger;
ResultString:=format('%s%d',TempArray);
showmessage(ResultString);
end;
 
好,谢谢各位,特别是hbwin2001
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部