5.3.2 Iterative Processing
안녕하세요^^
오늘은 macro에서의 Iterative Processing 두번째 시간입니다.
Iterative Processing 두번째 시간에는 매크로 문의 조건적 실행하는 방법에 대해 알아보고, 코드를 작성하는 방법에 대해 알아보겠습니다.
%DO 반복문을 조건적으로 사용하는 방법으로는 %DO %WHILE, %DO %UNTIL문이 있습니다.
먼저, %DO %WHILE 문은 일반적으로 아래와 같이 작성합니다
이 문장의 경우 반복문을 실행하기 전에 가장 위에서 expression을 평가하고, Expression이 참인동안 반복문을 실행합니다.
다음으로, %DO %UNTIL 문은 일반적으로 아래와 같이 작성합니다.
이 문장의 경우, 반복문을 실행한 후에 가장 밑에서 expression을 평가하고, expression이 참일때까지 반복문을 실행합니다.
따라서, 반복문은 적어도 한번은 반드시 실행됩니다.
======================================================================
예제를 통해 코드를 작성하는 방법을 살펴보도록 하겠습니다.
먼저. %DO %WHILE문을 작성해보도록 하겠습니다.
위에 작성한 코드를 살펴보면,
먼저 i=1이라고 매크로 변수를 지정합니다.
%DO %WHILE문은 조건문을 문장의 가장 처음에 평가하기 때문에, &i가 3보다 작은 상태인 동안, 아래의 문장을 반복적으로 실행하게 됩니다.
%eval 문장에서 &i에 1씩 더하는 문장을 작성합니다.
또한 let문으로 onechar이라는 매크로 변수를 만들며, 문자를 추출하는 함수 substr를 사용하여 abcdefghij 중 &i번째 문자를 1글자 추출합니다.
즉, 이 경우, i=1일 때 %WHILE 뒤에 나오는 조건을 만족하므로, i에 1을 더해서 i=2가 되고onechar=b가 됩니다.
다시 반복문 위로 올라와서 i=2일 때, 여전히 %WHILE 뒤에 나오는 조건을 만족하므로, i=3, onechar=c가 됩니다.
마찬가지로 다시 반복문 위로 올라와서,
i=3일 때 %WHILE 뒤에 나오는 조건을 만족하지 못하므로, 반복문이 끝나고 시작되는 %put 문장을 실행합니다.
따라서, i=3, onechar=c를 출력합니다.
======================================================================
다음으로. %DO %UNTIL문을 작성해보도록 하겠습니다
위에 작성한 코드를 살펴보면,
먼저 i=1이라고 매크로 변수를 지정합니다.
%DO %UNTIL문은 조건문을 문장의 가장 마지막에 평가하기 때문에, &onechar가 e이거나 &i가 10인 상태가 될때까지, 아래의 문장을 반복적으로 실행하게 됩니다.
%eval 문장에서 &i에 1씩 더하는 문장을 작성합니다.
또한 let문으로 onechar이라는 매크로 변수를 만들며, 문자를 추출하는 함수 substr를 사용하여 abcdefghij 중 &i번째 문자를 1글자 추출합니다.
즉, 이 경우, i=1일 때 반복문을 실행합니다.
i에 1을 더해서 i=2가 되고, onechar=b가 됩니다.
%UNTIL 뒤에 나오는 조건은 아직 만족하지 못하므로, i에 1을 더해서 i=3이 되고onechar=c가 됩니다.
여전히 %UNTIL 뒤에 나오는 조건은 아직 만족하지 못하므로, 다시 반복문을 실행하여 i=4, onechar=d가 됩니다.
하지만, 여전히 %UNTIL 뒤에 나오는 조건은 아직 만족하지 못하므로, 다시 반복문을 실행하여 i=5, onechar=e가 됩니다.
반복문 아래에서 조건을 만족하는 상황이 되어, %put 문장을 실행합니다.
따라서, i=5, onechar=e를 출력합니다.
이상으로 Iterative Processing 두 번째 시간으로 조건적 반복문 작성에 대해 알아보았습니다.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!