2012-03-26 34 views
0

这是一个简单的问题,但我不知道如何通过连接两个字符串来构造变量名称。下面的代码是如何做到这一点...将字符串连接成变量名称

var 
    UserName1 : String; 
    UserName2 : String; 
    Password1 : String; 
    Password2 : String; 
    UserCount : Integer; 

UserCount := 2; 

for Wk1 := 1 to UserCount do 
begin 
    DoLogin(UserName+Wk1, Password+Wk1); 
end; 

回答

2

基本上,你不能这样做。变量名在编译时固定,并转换为保存变量值的地址。

它看起来像你想要的数组,或在这种情况下,两个:一个数组将保存登录名和一个数组的密码。当然,你可以将两者结合成一条记录,然后得到一组记录。

type 
LogType = record 
      username, password: string[31] 
      end; 

var 
LogArray: array [1..10] of logtype; 
usercount, wk1: integer; 

begin 
UserCount := 2; 
for Wk1 := 1 to UserCount do 
    begin 
    DoLogin(logarray[wk1].username, logarray[wk1].password); 
    etc 
    end; 
end; 
+0

你使用'ShortString'作为字符串类型的原因是什么? OP没有指出任何需要,并且它在Delphi中不再常用(当然,在默认情况下,在Dephi 5中,这是标签之一)。 – 2012-03-26 16:39:45

+0

@Ken:习惯的力量。在20世纪80年代初,我开始使用Pascal进行编程,当时内存是一个限制。我不习惯用字符串来挥霍记忆...... – 2012-03-27 04:45:18

+2

@ No'amNewman:我想我可以理解你,但另一方面,你的习惯实际上可能导致你更大程度地挥霍记忆比使用'string'类型的可能性更大。考虑你的答案中的示例代码。你多久能碰到一个长达31个字的密码? – 2012-03-27 06:21:29

2

不要试图做到这一点。我们需要反射(或RTTI - 运行时类型信息),它在Delphi中使用并不好,因为它可以从发布版本更改为发布版本,并且在构建时我需要包含调试信息。

所以使用一个或两个数组。

var 
UserNames[1..2] : String; 
Passwords[1..2] : String; 
UserCount : Integer; 

UserCount := 2; 

for Wk1 := 1 to UserCount do 
begin 
    DoLogin(UserNames[Wk1], Passwords[Wk1]); 
end; 
+0

D2010在非公开符号上支持正确的RTTI。但它用大炮射击蚊子。蚊子已经死了,但其他人也是如此。 – 2012-03-27 19:13:52