1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
<?xml version="1.0" encoding="UTF-8"?>
<!--
* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
* Copyright (C) XXXX-2008 - INRIA
*
* This file must be used under the terms of the CeCILL.
* This source file is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at
* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
*
-->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="ru" xml:id="execstr">
<refnamediv>
<refname>execstr</refname>
<refpurpose>
исполняет Scilab-код, заданный в строках
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Последовательность вызова</title>
<synopsis>
execstr(instr)
ierr = execstr(instr,'errcatch' [,msg])
</synopsis>
</refsynopsisdiv>
<refsection>
<title>Аргументы</title>
<variablelist>
<varlistentry>
<term>instr</term>
<listitem>
<para>
вектор символьных строк, Scilab-инструкции, которые нужно исполнить.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ierr</term>
<listitem>
<para>
целое число, 0 или номер ошибки.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>msg</term>
<listitem>
<para>
символьная строка со значениями <literal>'m'</literal> или <literal>'n'</literal>. Значение по умолчанию - <literal>'n'</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsection>
<refsection>
<title>Описание</title>
<para>
Исполняет Scilab-инструкции, указанные в аргументе
<varname>instr</varname>.
</para>
<note>
Заметьте, что инструкции <varname>instr</varname> не должны использовать символы продолжения (..)
</note>
<para>
Если флаг <literal>'errcatch'</literal> не указан, то обработка ошибок ведётся как обычно.
</para>
<para>
Если указан флаг <literal>'errcatch'</literal>, и во время исполнения инструкций в <varname>instr</varname> произойдёт ошибка, то функция <function>execstr</function> не выдаст сообщения об ошибке, но прекратит исполнение инструкций <varname>instr</varname> (в том месте, где произошла ошибка), и вернёт номер ошибки <varname>ierr</varname>. В этом случае отображение ошибки управляется опцией <varname>msg</varname>:
</para>
<variablelist>
<varlistentry>
<term>"m"</term>
<listitem>
<para>
сообщение об ошибке выводится на экран и записывается.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>"n"</term>
<listitem>
<para>
сообщение об ошибке не отображается, однако записывается (see <link linkend="lasterror">lasterror</link>). Это значение по умолчанию.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<code>ierr = execstr(instr, 'errcatch')</code> может
обрабатывать синтаксические ошибки. Это полезно для
выполнения инструкций, полученных по запросу пользователя.
</para>
</refsection>
<refsection>
<title>Примеры</title>
<programlisting role="example"><![CDATA[
execstr('a=1') // устанавливает a=1.
execstr('1+1') // ничего не делает (тогда как evstr('1+1') возвращает 2)
execstr(['if %t then';
' a=1';
' b=a+1';
'else'
' b=0'
'end'])
execstr('a=zzzzzzz','errcatch')
execstr('a=zzzzzzz','errcatch','m')
//syntax errors
execstr('a=1?02','errcatch')
lasterror(%t)
execstr('a=[1 2 3)','errcatch')
lasterror(%t)
// variable1 не существует
if execstr('variable1;','errcatch')<>0 then
disp("Взведена ошибка");
else
disp("execstr полна счастья");
end
// variable2 существует ... execstr не взводит ошибки
variable2=[2,3];
if execstr('variable2;','errcatch')<>0 then
disp("Взведена ошибка");
else
disp("execstr полна счастья");
end
]]></programlisting>
</refsection>
<refsection role="see also">
<title>Смотрите также</title>
<simplelist type="inline">
<member>
<link linkend="evstr">evstr</link>
</member>
<member>
<link linkend="lasterror">lasterror</link>
</member>
<member>
<link linkend="error">error</link>
</member>
<member>
<link linkend="try">try</link>
</member>
</simplelist>
</refsection>
</refentry>
|