PowerBuilder 10.5
로그인 기능이 있는 어플리케이션이 있다고 가정합니다.
로그인할 때 입력하는 ID를 저장해 놓고 다시 로그인할 때 불러오는 기능을 구현하려고 한다면 어떻게 해야할까요?
사용자 PC에 설치된 어플리케이션마다 로그인 ID가 다르기 때문에
어플리케이션 단위로 ID를 저장해야 합니다.
Profile 관리 함수를 이용하면 쉽게 구현할 수 있습니다.
setprofilestring
profilestring
profileint
파빌에서는 제공하는 Profile 관리 함수입니다.
setprofilestring은 데이터를 파일에 저장합니다.
profilestring은 파일로부터 데이터를 string 타입으로 가져옵니다.
profileint는 파일로부터 데이터를 integer 타입으로 가져옵니다.
실습하면서 알아보겠습니다.
pb_study2 워크스페이스를 열고 다음 소스를 생성하십시오.
타겟 : profile
어플리케이션 오브젝트 : profile
윈도우 오브젝트 : w_main
profile 어플리케이션의 오픈이벤트에 다음 스크립트를 작성합니다.
open(w_main)
w_main 을 엽니다.
먼저 인스턴스변수를 하나 만듭니다.
'profile.ini' 는 프로파일 내용을 저장하고 읽어올 파일명입니다.
1. 파일생성
그리고 커맨드 버튼을 생성합니다.
name : cb_file
text : create file
cb_file의 clicked 이벤트를 열고 다음과 같이 스크립트를 작성합니다.
fileexists(is_file)
fileexists는 파일(is_file)의 존재여부를 boolean 타입으로 반환합니다.
fileopen(is_file, LineMode!, Write!)
fileopen은 파일(is_file)을 열어 읽고 쓸 수 있도록 합니다.
문법
fileopen ( filename {, filemode {, fileaccess {, filelock {, writemode { encoding }}}}} )
세번째 인수인 fileaccess는 Read! 또는 Write!를 값으로 가집니다.
fileaccess를 Write!로 해두고 fileopen 호출시 그 파일을 찾을 수 없다면 파일을 생성시킵니다.
이러한 특성을 이용하여 파일을 생성할 수 있습니다.
fileopen -> 파일 없음 -> 파일 생성
fileopen의 반환값은 파일에 부여되는 고유한 파일넘버값입니다.
fileclose(li_f)
는 파일넘버가 li_f인 열려있는 파일을 닫습니다.
소스 폴더를 열고 어플리케이션을 실행해서 create file 버튼을 클릭하면 'profile.ini' 파일이 생성되는 모습을 볼 수 있습니다.
2. 데이터 저장하기
w_main에 다음과 같은 컨트롤을 만듭니다.
커맨드버튼
name : cb_sps
text : setprofilestring
위치 : cb_file 아래
싱글라인에디트
name : sle_sps
위치 : cb_sps 오른편
1) [section1]
key1
cb_sps의 clicked 이벤트를 열고 다음 스크립트를 작성합니다.
setprofilestring(is_file, 'section1', 'key1', sle_sps.text)
sle_sps.text 의 값을 section1 섹션의 key1 키에 할당한다는 뜻입니다.
문법
SetProfileString ( filename, section, key, value )
filename : profile 파일명(경로포함)
section : 값과 관련된 섹션(그룹)
key : 값을 할당할 섹션(구룹) 내의 키
value : 키에 할당할 값
setprofilestring 함수의 문법이 좀 난해합니다.
실행하고 난 다음 만들어진 실제 데이터를 보면서 설명하겠습니다.
어플리케이션을 실행합니다.
sle_sps에 'value11'를 입력하고 cb_sps 버튼을 클릭한 다음, profile.ini 파일을 열어 데이터를 확인합니다.
[section1]
key1=value11
section1 섹션은 [ ]로 묶여있습니다.
바로 밑에 key1 키가 보이고 'value11'이 할당되어있습니다.
value11은 sle_sps.text에 입력한 값입니다.
2) [section1]
key2
cb_sps의 clicked 이벤트 스크립트를 다음과 같이 수정합니다.
setprofilestring(is_file, 'section1', 'key2', sle_sps.text)
'key1'을 'key2'로 수정했습니다.
어플리케이션을 실행합니다.
sle_sps에 'value12'를 입력하고 cb_sps 버튼을 클릭한 다음, profile.ini 파일을 열어 데이터를 확인합니다.
(profile.ini 파일이 열려있다면 닫고 다시 엽니다.)
[section1]
key1=value11
key2=value12
sle_sps 에 입력된 값 'value12'가 key2에 할당되었습니다.
3) [section2]
key1
cb_sps의 clicked 이벤트 스크립트를 다음과 같이 수정합니다.
setprofilestring(is_file, 'section2', 'key1', sle_sps.text)
어플리케이션을 실행합니다.
sle_sps에 '21'를 입력하고 cb_sps 버튼을 클릭한 다음, profile.ini 파일을 열어 데이터를 확인합니다.
(profile.ini 파일이 열려있다면 닫고 다시 엽니다.)
[section1]
key1=value11
key2=value12
[section2]
key1=21
sle_sps 에 입력된 값 '21'이 section2 섹션 key1 키에 할당되었습니다.
섹션으로 그룹을 구분하고 여러개의 키에 값을 할당하는 구조임을 알 수 있습니다.
3. 데이터 가져오기
값을 입력했으니 값을 불러오겠습니다.
w_main에 다음과 같은 컨트롤을 만듭니다.
커맨드버튼
name : cb_ps
text : profilestring
위치 : cb_sps 아래
스태틱텍스트
name : st_ps
위치 : cb_ps 오른편
커맨드버튼
name : cb_pi
text : profileint
위치 : cb_ps 아래
스태틱텍스트
name : st_pi
위치 : cb_pi 오른편
1) [section1]
key1
cb_ps의 clicked 이벤트를 열고 다음 스크립트를 작성합니다.
string ls_rtn
ls_rtn = profilestring(is_file, 'section1', 'key1', '')
st_ps.text = ls_rtn
section1 섹션의 key1 키값을 가져와 ls_rtn 에 저장하고 st_ps 에 표시합니다.
문법
ProfileString ( filename, section, key, default )
filename : profile 파일명(경로포함)
section : 값과 관련된 섹션(그룹)
key : 값이 할당된 섹션(구룹) 내의 키
default : 파일, 섹션 또는 키가 없을 때의 string 타입의 반환값
반환값 : string 타입
실행하고 cb_ps 버튼을 클릭하면 key1 키에 할당되었던 'value11'이 st_ps에 표시됩니다.
2) [section1]
key2
cb_ps의 clicked 이벤트 스크립트를 다음과 같이 수정합니다.
string ls_rtn
ls_rtn = profilestring(is_file, 'section1', 'key2', '')
st_ps.text = ls_rtn
실행해서 확인해 보면 st_ps에 'value12' 가 표시됩니다.
3) [section2]
key1
cb_pi의 clicked 이벤트 스크립트를 다음과 같이 작성합니다.
int li_rtn
li_rtn = profileint(is_file, 'section2', 'key1', 0)
st_pi.text = string(li_rtn)
실행하고 cb_pi 버튼을 클릭하면 section2 섹션 key1 키에 할당되었던 '21'이 st_pi에 표시됩니다.
문법
ProfileInt ( filename, section, key, default )
filename : profile 파일명(경로포함)
section : 값과 관련된 섹션(그룹)
key : 값이 할당된 섹션(구룹) 내의 키
default : 파일, 섹션 또는 키가 없을 때 또는 key값을 integer 타입으로 변환할 수 없을 때,
integer 타입의 반환값
반환값 : integer 타입
profileint 는 key값을 integer 타입으로 변환해서 가져옵니다.
만약 key값에 숫자가 아닌 문자열이 포함되면 integer 타입으로 변환하지 못합니다.
이럴 때 default로 설정해 놓은 값을 반환합니다.
수고하셨습니다.
'파워빌더 기초강의2' 카테고리의 다른 글
파워빌더(PowerBuilder) 강의2 - 5.User Object : Standard Class (1) | 2017.07.27 |
---|---|
파워빌더(PowerBuilder) 강의2 - 4.User Object : Custom Visual (1) | 2017.07.24 |
파워빌더(PowerBuilder) 강의2 - 3.User Object : Standard Visual (4) | 2017.07.19 |
파워빌더(PowerBuilder) 강의2 - 1.Transaction Object Variable (3) | 2017.06.30 |
파워빌더(PowerBuilder) 강의2 - 시작에 앞서 (6) | 2017.06.29 |