Scilab명령어를 담은 문자열을 실행시킬 수 있는 명령어들이 있다. 세 개가 있는데 다음 표에 정리하였다.
[표 1] 문자열을 실행시키는 함수들
함수명 | 기능 |
execstr | Scilab 명령 문자열을 실행한다. |
eval evstr | Scilab expression 실행(행렬 반환) 위와 기능은 동일하나 에러를 traping할 수 있음 |
먼저 execstr()은 Scilab 명령을 담은 문자열을 실행하는 것이다. (MATLAB의 eval 함수의 기능에 해당됨.)
>> execstr('a=1+sin(%pi/2)')>> aa =2. |
이 예에서 보듯이 execstr()함수는 세미콜론이 붙지 않은 명령이라도 그 결과를 콘솔창에 표시하지 않는다. 만약 문자열에 명령 에러가 있다면 execstr()함수는 실행이 멈추게 된다. 다음 예를 보자.
>> execstr('a=2#4'), c=%ia=2#4!--error 276Missing operator, comma, or semicolon.in execstr instruction called by :execstr('a=2#4'), c=%i |
이 예에서 ‘a=2#4’라는 명령은 문법 오류가 있으므로 거기서 실행이 멈춰버리고 에러메서지를 밷는다. 따라서 c=%i 라는 그 뒤의 명령은 실행되지 않는다.
만약 실행을 멈추지 않고 에러의 발생 여부를 처리하고 싶다면 다음 예와 같이 옵션을 사용하면 된다.
>> ier = execstr(['a#2','b=%pi'], 'errcatch','n'), c=%iier =4.c =i |
두 번째 인수로 ‘errcatch’ 를 주었는데 이것은 에러가 발생하면 실행을 멈추지 말고 단순히 ier에 그 결과를 반환하라는 것이다. 세 번째 인수가 ‘n’ 이라면 에러의 개수를 ‘m’ 이라면 에러메세지를 반환하다. 이 경우는 execstr()함수 뒤의 c=%i 가 실행된다는 점이 앞으 경우와 다르다. execstr()함수에는 두개의 명령 ‘a#2’ 와 ‘b=%pi’ 가 들어갔는데 두 번째 명령은 오류가 없음에도 첫 번째 명령에 에러가 있으면 두 번째 것이 실행되지 않고 에러를 캐치하고 넘어가 버린다. 따라서 변수 b도 생성되지 않고 c만 생성이 된 것이다.
함수 eval()과 evstr()은 문자열 행렬의 값을 구해서 행렬로 반환해 주는 함수이다. 두 함수의 차이점은 에러를 캐치할 수 있느냐(evstr 함수), 없으냐(eval)이다. 예를 들면 다음과 같다.
>> a=%i; b=%e;>> A=eval(['a' 'b'; 'a+b' 'a-b'])A =i 2.71828182.7182818 + i - 2.7182818 + i |
evstr()함수는 두 번째 출력 인수를 지정해 주면 그것에 에러의 번호를 반환하고 함수 자체는 실행이 멈추지 않고 정상적으로 종료된다.
>> A=eval(['a' 'c'; 'a+b' 'a-b']); d=10;!--error 4Undefined variable: cat line 3 of function %eval called by :at line 20 of function eval called by :A=eval(['a' 'c'; 'a+b' 'a-b']); d=10; |
이 예에서 eval()함수 내부의 c변수는 없는 변수이므로 에러를 발행하고 실행이 거기서 멈춰버린다. 따라서 뒤에 있는 d=10; 이라는 명령은 실행되지 않는다. 반면에 다음 예를 보자.
>> [A,ier]=evstr(['a' 'c'; 'a+b' 'a-b']); d=10;>>dd =10. |
이 예에서 evstr()은 eval()과 같은 일을 수행하지만 만약 에러가 발행한다면 두 번째 출력인수 ier에 에러의 코드를 반환하고 정상적으로 종료한다. 따라서 그 뒤에 오는 명령인 d=10;도 정상적으로 수행된다.
'프로그래밍언어.Lib > Scilab' 카테고리의 다른 글
싸이랩(scialb)의 구조체(struct) (0) | 2015.06.19 |
---|---|
싸이랩(scialb)의 스크립트 파일(sce 파일) 작성과 실행 (0) | 2015.06.19 |
싸이랩(scialb)의 문자열 조작 (0) | 2015.06.17 |
싸이랩(scialb)의 문자열(string)과 관련 함수 (0) | 2015.06.17 |
싸이랩(scialb)의 특수 행렬을 생성하는 함수들 (0) | 2015.06.17 |