2012-03-26 22 views
0

これは簡単な質問ですが、2つの文字列を連結して変数名を構成する方法はわかりません。以下のコードは、それをしない方法です...文字列を変数名に連結する

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

基本的にこれはできません。変数名はコンパイル時に固定され、変数の値を保持するアドレスに変換されます。

配列が必要な場合、またはこの場合は2つのように見えます.1つの配列にはログイン名が格納され、1つの配列にはパスワードが格納されます。もちろん、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ではもはや一般的には使用されていない(タグの1つにあるDephi 5ではデフォルトではない)。 –

+0

@Ken:習慣の力。私は、メモリが制約であった1980年代初めに、パスカルでプログラミングを始めました。私は文字列を使ってメモリを使うのを慣れるのに慣れることができません.... –

+2

@ No'amNewman:私はあなたを理解することができると思いますが、一方、あなたの習慣は、これは 'string'型の場合よりも優れています。あなたの答えのサンプルコードを考えてみましょう。どのくらいの頻度で長いパスワード(31文字)を見つけることができますか? –

2

これを試してはいけません。

Reflection(またはRTTI - 実行時のタイプ情報)が必要になります。Delphiではリリースごとに変更できるので使いにくく、ビルド時にデバッグ情報を含める必要があります。

したがって、1つまたは2つの配列を使用してください。

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をサポートしています。しかし、それは大砲で蚊を撃った。蚊は死んでいますが、他の人もそうです。 –

関連する問題