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

기본적으로 이렇게 할 수 없습니다. 변수 이름은 컴파일시 고정되어 변수 값을 저장하는 주소로 변환됩니다.

배열을 원한다거나이 경우에는 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는 델파이에서 더 이상 필요하지 않다. 델파이에서는 더 이상 일반적으로 사용되지 않는다. (태그 중 하나 인 Dephi 5에서는 기본적으로 그렇지 않다.) –

+0

@Ken : 습관의 힘. 메모리가 제약 사항이었던 1980 년대 초 파스칼로 프로그래밍하기 시작했습니다. 나는 문자열로 메모리를 사용하는 것을 익살스럽게하는 데 익숙해 질 수 없다 .... –

+2

@ No'amNewman : 나는 너를 이해할 수 있다고 생각하지만, 반면에, 너의 습관은 너를 더 큰 범위로 추모하게한다. 'string' 타입보다 더 낫습니다. 답안의 샘플 코드를 고려하십시오. 얼마나 오랫동안 (31 문자) 암호를 자주 찾을 수 있습니까? –

2

시도하지 마십시오.

Reflection (또는 RTTI - Run Time Type Information)이 필요할 것이므로 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를 지원합니다. 그러나 그것은 대포로 모기를 쏘았습니다. 모기는 죽었지 만 다른 모든 사람들도 마찬가지입니다. –

관련 문제