1. 형식: result= listmerge(listfile)
2. 기능: 형식화된 자료(목록) 파일을 읽어서 폼과 병합(합성)하여 표준출력장치로
출력을 한다. 만일 개방된 폼이 없다면 출력을 하지 않으며 변수에 값만
대입한다. 대입되는 변수의 값은 모두 문자열로 저장된다.
( 폼의 내용중에서 잘못된 폼 매크로가 사용되었다면 에러 처리된다 )
( setlocal(ON) 이면 전역 변수, setlocal(OFF) 이면 지역 변수에 대입됨 )
3. 설명
(1) 인자 listfile은 문자열로 자료(목록) 파일명이며 경로명을 포함할 수 있다.
(2) 개방된 폼이 없는 상태에서 result의 값은 대입된 변수의 개수이다.
(3) 개방된 폼이 있는 상태에서 result의 값은 폼의 병합 횟수로 폼의 제어
명령이 없었다면 출력된 폼의 개수이고 폼 제어 명령이 있었다면 endrep과
stop명령의 반복 횟수가 포함된다.
(4) result의 값이 -4(LIST_OPENERR)이면 자료(목록)파일이 없거나 개방할 수
없는 경우이다.
4. 자료(목록) 파일의 구조
(1) 주석(Comment): 공백을 제외한 최초 문자 또는 변수값의 분리문자가 ';'이나
'#'이면 그 문자로부터 그 줄 끝까지는 주석으로 처리된다.
(2) 자료 필드의 구조
형식1) 변수명=["|']변수값["|'],...[자료처리명령어]
형식2) ["|']변수값["|'],...[자료처리명령어]
1) 대괄호([])는 그 안의 내용이 생략 될 수 있음을 의미한다.
2) 대괄호 안의 '"'와 '''사이의 '|'기호는 '또는'을 의미하며
'"'로 시작하면 '"'로 끝나야 하고 '''로 시작하면 '''로 끝나야 한다.
3) '...'은 형식의 처음부터 표시 전의 내용이 반복될 수 있음을 의미한다.
4) 등호기호(=)는 변수명의 분리기호로써 등호 외에 ':'을 사용할 수도 있다.
5) 쉼표기호(,)는 변수값의 분리기호로써 쉼표 외에 공백,'#',';','\n'를
사용할 수도 있다.
6) 변수값은 모두 문자열로 저장된다.(수치가 아니다)
7) 변수값에 공백이 있으면 인용부호(" 또는 ')를 생략할 수 없다.
8) 형식1)에서 변수명과 분리기호(=)에는 공백이 있을 수 없다.
9) 형식2)에서 변수값에 대한 변수명은 내부변수로써 "field"와 순번으로
변수명이 할당된다. 예를 들어 처음 변수값은 field1에 두번째 변수값은
field2에 이와 같이 순서 있게 대입되며 개행문자('\n')에서 강제로 !merge
기능을 수행한 후 다음 줄의 자료는 다시 field1부터 순서 있게 대입된다.
10) 자료처리명령어는 아래와 같은 종류가 있으며 폼을 제어하기 위한 것으로
폼이 없으면 이 명령들은 무시된다.
-. !merge : 이 명령 이전까지의 자료만으로 폼을 병합하여 출력한다.
주로 폼에 반복부분이 있는 목록 형식의 출력에 사용한다.
-. !exitrep : 폼의 반복부분을 탈출한다. 반복부분이 중첩되어 있을
때에는 제일 안쪽의 하나의 반복부분만 탈출한다.
11) 형식1)의 자료(목록) 파일의 예
+----------------------------------------------------------------+
| ;이것은 시험용 자료입니다. |
| a=1, b="test", c=3; 변수 a와 b와 c가 확보되며 각각 값이 대입됨 |
| d=10, !merge; 개방된 form이 있다면 출력을 한다. |
+----------------------------------------------------------------+
12) 형식2)의 자료(목록) 파일의 예
+----------------------------------------------------------------+
| 1, 2, 3; field1=1, field2=2, field3=3이 대입된 후 form이 출력됨|
| "ab","cd","ef"; field1="ab", field2="cd", field3="ef" 대입된 후|
| ; 개방된 form이 있다면 출력을 한다. |
+----------------------------------------------------------------+
4. 사용예
formname= helpdir ~ "temp/addr.fom";
listname= helpdir ~ "temp/addr.dat";
if(formopen(formname)!=FORM_NOERR)
{
print("form file open error!\n");
return;
}
if(listmerge(listname)==LIST_OPENERR)
{
print("list file open error!\n");
}
formclose();
------------------------------ [ 출력결과 ] ------------------------------
+---------------------------------------------------------+
| 123-456 123-4567(☎) |
| |
| 서울시 oooo구 oooo동 123번지 |
| ooo |
+---------------------------------------------------------+
+---------------------------------------------------------+
| 123-456 765-4321(☎) |
| |
| 서울시 oooo구 oooo동 123번지 |
| Wel |
+---------------------------------------------------------+
|