2012-03-26 41 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