StrToInt 라는 함수를 사용해서 우리는 문자열을 숫자로 변환한다.

하지만 이게 전부 숫자로 이루어진 문자열인지 궁금해질 때가 있다.

무턱대고 변환만 시켜대다간, 에러메세지를 만나게 된다.

 

예를 들어,

Form1.Width:=StrToInt('3a33'); 

 

위와 같은 코드는

'3a33' is is not a valid integer value. 

이런 에러메세지를 토하게 된다.

 

 

원래라면 그런 의미로 쓰자는 건 아니겠지만 어떤 문자열이 숫자로만 이루어져 있는지 판단하는데 TryStrToInt 라는 함수를 사용할 수 있다.

 

SysUtils 에 정의되어 있으며, Syntax 는 아래와 같다.

 

function TryStrToInt(const S: string; out Value: Integer): Boolean; 

 

 

 

S 로 전달받은 문자열이 전부 숫자일 경우 포인터로 넘겨받은 Value 에 변환값을 넣고 True 를 반환하며,

만약 전달받은 문자열이 숫자가 아닐 경우에 False 를 반환한다.

 

procedure Form1.Button1Click(Sender: TObject); 

var RetInt: Integer; 

begin 

if TryStrToInt(Edit1.Text, RetInt) then Self.Width:=RetInt 

else ShowMessage('숫자만 넣으라고 했잖소'); 

end

 

예를 들어 위의 코드는 Edit1 이라는 TEdit 에 폼의 크기를 정할 숫자를 입력받아 해당 문자열이 전부 숫자인지 검사한 후,

전부 숫자라면 폼의 가로크기를 해당 숫자만큼 바꾸고,

전부 숫자가 아니라면 '숫자만 넣으라고 했잖소' 라는 메세지창을 출력한다.

 

 

 

참고로, TryStrToInt 는 16진수도 변환해준다.

예를 들어 '$FF' 라는 문자열의 변환을 시도할 경우 Value에 256을 세팅하고 True 를 반환해준다.

StrToInt 도 마찬가지다.  

 

참고로 16진수 헥사코드를 받아들여 변환하지 않고 십진수만 할거라면 아래와 같이 함수를 만들면 된다.

 

function TryDecimalStrToInt(const S: String; out Value: Integer): Boolean;

begin 

Result:=(Pos('$', S)=0) and TryStrToInt(S, Value); 

end

 

위와 같이 만들었다면 '$FF' 를 넣을 경우 False 를 반환한다.

 

 

 

StrToIntDef 도 참고로 볼 것.









Posted by bloodguy
,