포스팅 목차
42. CALL MODULE
return code 없이 외부 루틴(windows API : WINDOWS에서 제공하는 함수)을 호출하여 사용한다.
Category: | 외부 루틴 |
MAIN |
문 법
CALL MODULE (<cntl-string,>module-name<,argument-1, ..., argument-n>); |
Arguments
- cntl-string
- 는 선택적 통제 열을 지정.
- module-name
- 는 이용될 외부 모듈 이름 지정.
- argument
- 는 외부 루틴에 대한 인수 지정.
참 고
자세한 사항은 SAS도움말과 다음 페이지를 참고하시기를
( http://www.devenezia.com/downloads/sas/sascbtbl )
* MODULE 함수를 사용해 외부의 DLL 루틴을 데이터 스텝이나 SCL 프로그램중으로부터 이용할 수 있습니다.
* 간단한 DOS명령어보다 WIN32 API(Application Programming Interfaces)를 선호하는 이유.
1. WIN32 API는 DOS명령어보다 빠르다;
2. DOS 명령어는 명령어 실행동안 Pop-up창이 뜬다.
* Some Module 정의
SAS Statements | Results |
---|---|
ExitWindowsEX | 이 함수는 윈도우 O/S에게 윈도우가 종료되어야 함을 알려 윈도우 O/S가 종료되게 한다. |
GetDiskFreeSpace | 디스크 용량을 알아낸다. |
GetDriveType | 드라이브의 종류를 취득한다. |
GetModuleFileName | 현재 실행 중인 파일의 파일경로를 반환한다. |
GetModuleHandle | 활성 메모리의 모듈이나 dll의 핸들을 return합니다. |
GetPrivateProfileInt | INI파일의 정보를 읽고 쓴다. |
GetPrivateProfileString | INI파일의 정보를 읽고 쓴다. |
GetProfileInt | WIN.INI파일의 정보를 읽고 쓴다. |
GetProfileString | WIN.INI파일의 정보를 읽고 쓴다. |
GetSystemDirectory | 시스템 디렉토리를 반환한다. |
GetTempPathTEMP | 폴더의 경로를 반환한다. |
GetTempFileName | TEMP파일을 생성한다. |
GetUserNameA | 현재 유저의 로그온 네임을 return합니다. |
GetVersion | 운영시스템의 버전 정보를 반환한다. |
GetVersionEx | 운영시스템의 버전의 확장된 정보를 반환한다. |
GetVolumeInformation | 드라이브 관련 정보들, 즉 볼륨이름, 볼륨 시리얼넘버, 파일 시스템 이름 등을 알려줍니다. |
GetWindowsDirectory | 이 함수는 윈도우즈 디렉토리를 반환한다.GetSystemInfo시스템 정보를 반환한다. |
MessageBeep | 소리를 발생한다. |
MessageBox | 메시지 박스를 출력합니다. |
SwapMouseButton | 마우스의 오른쪽 버튼과 왼쪽 버튼을 서로 교환한다. |
WritePrivateProfileString | INI파일에 정보를 복사한다. |
WriteProfileString | WIN.INI파일에 정보를 복사한다. |
GetWin32sInfo | 현재 인스톨된 WIN32의 버전 정보를 반환한다. |
예 제
예 제 1 :
외부루틴(Beep)을 사용하여서 소리를 발생시킨다.
SAS Statements |
FILENAME back "c:\back.dat"; data _null_; file back; put "routine Beep"; put "minarg=2"; put "maxarg=102"; put "stackpop=called"; put "callseq=byvalue"; put "module=kernel32;"; put "arg 1 num format=pib4.;"; put "arg 2 num format=pib4.;"; run; filename sascbtbl "c:\back.dat"; data _null_; call module ("Beep",1980,500); * rc = modulen("Beep",1980,500); run; |
예 제 2 :
외부루틴(GetUserNameA)을 사용하여서 사용자 이름을 획득하자.
* 외부 DLL 호출의 기능을 사용하여, Win32 API GetUserName 함수에 의해서 유저 ID를 취득한다.
SAS Statements |
'c:\tmp.txt'; /* 속성 테이블의 작성 */ data _null_; sascbtbl; 'routine GetUserNameA'; ' minarg=2'; ' maxarg=2'; ' stackpop=called'; ' module=advapi32'; ' returns=short;'; 'arg 1 update format=$cstr200.; '; 'arg 2 num input format=pib4.; '; run; data _null_; userid $20; userid = ' '; * OS(WIN_PRO)의 판정; "&sysscpl" ne 'WIN_PRO' ; 'Windows 95 or Windows NT환경에서만 동작합니다.'; ; ; SASCBTBL * 유저 ID의 획득; * call module ('GetUserNameA', userid, 20); rc = modulen('GetUserNameA', userid, 20); if rc=0 then put '특정의 유저 ID로 로그 온 하고 있지 않습니다.'; else put userid=; run; |
예 제 3 :
외부루틴(MessageBoxA)을 이용하여서 POP-UP창 만들어 보자.
SAS Statements |
filename SASCBTBL 'c:\tmp.txt'; /* 속성 테이블의 작성 */ data _null_; file sascbtbl; put 'routine MessageBoxA'; put 'module=USER32'; * dll이름; put 'minarg=4'; * 인수 최소개수; put 'maxarg=4'; * 인수 최대개수; put 'stackpop=called'; * 모든 win32 서비스 루틴이 이속성을 필요로함(루틴호출); put 'returns=short'; * dll루틴 반환타입; put ';'; put 'arg 1 input num format=pib4. byvalue;'; put 'arg 2 input char format=$cstr200.;'; put 'arg 3 input char format=$cstr200.;'; put 'arg 4 input num format=pib4. byvalue;'; run; data back; call module("MessageBoxA",0,'백승민사랑하십니까?','만만세',0); run; |
예 제 4 :
외부루틴(CopyFileA)을 사용하여서 DATA FILE 복사하자. 즉, back.txt 파일을 copyfile.txt 파일로 복사한다.
SAS Statements | 비 교 |
---|---|
filename sascbtbl 'c:\back.txt'; data back; file sascbtbl; put 'Routine CopyFileA'; put 'module=KERNEL32'; put 'minarg=3 maxarg=3 stackpop=called'; put 'returns=ushort;'; put 'arg 1 input char format=$cstr200.; * FROM ;'; put 'arg 2 input char format=$cstr200.; * TO ;'; put 'arg 3 input num format=pib4. byvalue;'; run; filename sascbtbl 'c:\back.txt'; data _null_; rc = modulen('*e','CopyFileA','c:\back.txt', 'c:\copyfile.txt', 0); run; filename sascbtbl clear; |
* system(도스) 명령어사용하여서 파일을 복사하자; Data _null_; rc = system('copy c:\back.txt c:\copyfile.txt'); Run; |
예 제 5 :
외부루틴(GetTempPathA)을 사용하여서 TEMP 루트 위치를 파악하자.
SAS Statements |
filename sascbtbl "c:\back.txt"; data _null_; file sascbtbl; put 'routine GetTempPathA'; put 'minarg=2'; put 'maxarg=2'; put 'stackpop=called'; put 'returns=long;'; put 'arg 1 input byvalue format=pib4.;'; put 'arg 2 update format=$cstr200.;'; run; filename sascbtbl "c:\back.txt"; data _null_; length path $200; path=''; n = modulen( "*ie","KERNEL32,GetTempPathA", 199, path ); put n= path=; run; |
예 제 6 :
외부루틴(lstrcat)을 이용하여서 문자열 결합하자.
다음의 예제는 외부 루틴을 사용하여서 변수 string1과 변수 string2를 결합하여 출력한다.
SAS Statements |
filename sascbtbl "c:\back.txt"; data _null_; file sascbtbl; put 'routine lstrcat'; put 'minarg=2'; put 'maxarg=2'; put 'stackpop=called'; put 'module=KERNEL32'; put 'returns=ulong;'; put 'arg 1 char format=$cstr200.;'; put 'arg 2 char format=$cstr200.;'; run; filename sascbtbl 'c:\back.txt'; data _null_; length string1 string2 conctstr $200; string1 = 'This is'; string2 = ' a test!'; rc = modulen('lstrcat',string1,string2); conctstr = peekc(rc,200); put conctstr=; run; |
함수 비교
Functions:
|
SAS 함수(SAS Function) 리스트 링크 |
엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크 |
SAS 데이터 스텝 구문 리스트(SAS Data Step Statement) |
'SAS > SAS 함수' 카테고리의 다른 글
【SAS 함수】 44. CALL POKE 함수 (0) | 2018.11.20 |
---|---|
[SAS 함수] 43. CALL MODULEI 함수 (0) | 2018.11.20 |
【SAS 함수】 41. CALL MISSING 함수 (0) | 2018.11.19 |
[SAS 함수] 40. CALL LOGISTIC 함수 (0) | 2018.11.19 |
[SAS 함수] 39. CALL LABEL 함수 (0) | 2018.11.19 |
댓글