<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) XXXX-2008 - INRIA
 *
 * Copyright (C) 2012 - 2016 - Scilab Enterprises
 *
 * This file is hereby licensed under the terms of the GNU GPL v2.0,
 * pursuant to article 5.3.4 of the CeCILL v.2.1.
 * This file was originally licensed under the terms of the CeCILL v2.1,
 * and continues to be available under such terms.
 * For more information, see the COPYING file which you should have received
 * along with this program.
 *
 -->
<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="fr" xml:id="execstr">
    <refnamediv>
        <refname>execstr</refname>
        <refpurpose>exécution d'instructions Scilab contenues dans des chaînes de caractères</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Séquence d'appel</title>
        <synopsis>
            execstr(instr)
            ierr = execstr(instr, 'errcatch' [,msg])
            [ierr, errormsg] = execstr(instr,'errcatch' [,msg])
            [ierr, errormsg, callstack] = execstr(instr,'errcatch' [,msg])
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Paramètres</title>
        <variablelist>
            <varlistentry>
                <term>instr</term>
                <listitem>
                    <para>vecteur de chaînes de caractères.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>ierr</term>
                <listitem>
                    <para>entier, 0 ou numéro de l'erreur.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>msg  </term>
                <listitem>
                    <para>
                        chaîne de caractères (<literal>'m'</literal> ou <literal>'n'</literal>). La valeur
                        par défaut est <literal>'n'</literal>.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>errormsg</term>
                <listitem>
                    <para>
                        message d'erreur en cas d'erreur et que le d'argument <literal>'errcatch'</literal> est spécifié.
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>callstack</term>
                <listitem>
                    <para>
                        pile d'appel en cas d'erreur et que le d'argument <literal>'errcatch'</literal> est spécifié.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Description</title>
        <para>Exécute les instructions Scilab données dans l'argument
            <varname>instr</varname>.
        </para>
        <note>
            Note : les instructions <varname>instr</varname> ne doivent pas comporter de marques de suite (..).
        </note>
        <para>
            Si <literal>'errcatch'</literal> n'est pas présent dans les arguments, les erreurs sont contrôlées comme d'habitude.
        </para>
        <para>
            Si <literal>'errcatch'</literal> est présent dans les arguments, et qu'une erreur est
            rencontrée lors de l'évaluation d'un élément de <varname>instr</varname>,
            <function>execstr</function> ne produit aucun message d'erreur, mais stoppe
            l'exécution des instructions stockées dans <varname>instr</varname> (au point
            où l'erreur s'est produite), et renvoie dans <varname>ierr</varname> le numéro
            de l'erreur. Dans ce cas l'affichage du message d'erreur est contrôlé par
            l'option <varname>msg</varname> :
        </para>
        <variablelist>
            <varlistentry>
                <term>"m"</term>
                <listitem>
                    <para>le message d'erreur est affiché et enregistré</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"n"</term>
                <listitem>
                    <para>le message d'erreur n'est pas affiché mais il est enregistré
                        (voir <link linkend="lasterror">lasterror</link>). Il s'agit du comportement par
                        défaut.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>
            <code>ierr = execstr(instr, 'errcatch')</code> peut gérer les erreurs de syntaxes. Ceci
            peut être utile pour évaluer les instructions obtenues par une requète à
            l'utilisateur (interface homme-machine).
        </para>
    </refsection>
    <refsection>
        <title>Exemples</title>
        <programlisting role="example">
    <![CDATA[
execstr('a=1') // affecte a=1.

execstr('1+1') // ne fait rien de particulier (alors que evstr('1+1') renvoie 2)

execstr(['if %t then';
         '  a=1';
         '  b=a+1';
         'else'
         ' b=0'
         'end'])

// récupération des erreurs d'exécution
execstr('a=zzzzzzz','errcatch')
execstr('a=zzzzzzz','errcatch','m')

// récupération des erreurs de syntaxe
execstr('a=1?02','errcatch')
lasterror(%t)

execstr('a=[1 2 3)','errcatch')
lasterror(%t)

// variable1 n'existe pas
if execstr('variable1;','errcatch')<>0 then
   disp("Declenche une erreur");
else
   disp("execstr est content");
end

// variable2 existe ... Pas d'erreur dans execstr
variable2=[2,3];
if execstr('variable2;','errcatch')<>0 then
   disp("Declenche une erreur");
else
   disp("execstr est content");
end

//get errormsg if case of error
[_ b] = execstr("acosd(""a"");", "errcatch")
]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Voir aussi</title>
        <simplelist type="inline">
            <member>
                <link linkend="try">try</link>
            </member>
            <member>
                <link linkend="errclear">errclear</link>
            </member>
            <member>
                <link linkend="whereami">whereami</link>
            </member>
            <member>
                <link linkend="evstr">evstr</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
