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로 설정해 놓은 값을 반환합니다.

 

 

 

수고하셨습니다.

 

 

 

 

Posted by 신선봉(닉네임)

댓글을 달아 주세요

  1. Favicon of http://ehdqhd.tistory.com BlogIcon 동봉이 2017.07.26 14:04 신고  댓글주소  수정/삭제  댓글쓰기

    회사 ERP 프로그램에 아이디가 마지막으로 접속한사람것으로 남아있었는데 이것때문이였군요. 잘 배우고 갑니다.

  2. 초롱아빠 2017.12.04 15:17 신고  댓글주소  수정/삭제  댓글쓰기

    고수님 안녕하세요? 잘 보았습니다.

    그런데... 파일에 섹션이나 키 값은 따로 없고... 모두 Value 값만 있는 .txt 파일의 정보를 가져올 때는 어떻게 하나요?

    예를 들어... A20171204.txt 파일에...
    A1234567890
    A1234567891
    A1234567892
    ...
    이렇게 계속되는 값만 있는데... 이것을 가져올려고 합니다.

    감사합니다.

    • Favicon of http://all4museum.tistory.com BlogIcon 신선봉(닉네임) 2017.12.04 18:50 신고  댓글주소  수정/삭제

      dw 컨트롤 함수 importfile 을 이용하면 되는데요.
      먼저 txt 파일을 받을 dw를 만듭니다.
      보통은 external 타입 dw를 생성해서 데이터를 받을 칼럼을 지정합니다.

      external dw를 생성했고 이것을 dw 컨트롤(dw_a)와 연결했다고 가정하면

      dw_a.importfile( "d:\A20171204.txt" )

      이렇게 하면 파일로부터 데이터를 읽어 dw에 저장하게 됩니다.

      "d:\A20171204.txt" 는 파일이 위치한 경로입니다.