Chut!

ou comment faire taire MATLAB ?!
J’avais écris un logiciel avec pleins de fprintf afin de pouvoir créer un log avec diary.
Evidemment ça ralentit le process le fait de faire afficher pleins de lignes dans le Command Window.
Là l’idée c’était de pouvoir ajouter une option qui fasse que les fprintf n’affichent rien.
J’aurais pu rajouter une checkbox dans l’interface que j’aurais appelée « verbosity » . Si cette checkbow n’était pas cochée , cela signifait que l’opérateur ne voulait rien voir à l’écran.
Mais bon vu que j’en avais plus de 3000 lignes de fprintf je n’avais pas envie de faire 300 if-test du style:

if verbosity % checkbox has value 1
fprintf('\n ...')
end

La solution est en fait toute simple et ne requière aucune modification de code … (solution page suivante )

il suffit d’utilser evalc

Prenons un exemple simple où il n’ya que 2 fprintf (et pas 3000 comme dans mon cas)

function  y = matlab4geek(x)
% dummy code to multiply by 3 an input
%
% Input : numerical value
% Output : input multiplied by 3
%
% Example : y = matlabgeek(2) will return 6
%
% See also why(393)
%
% Create Date : 07-Feb-2013
% Author : Aurelien QUEFFURUST
fprintf('\n %s',datestr(now))
fprintf('\n input x :%d\n',x)
y = x*3;

Si je l’execute il va m’afficher :

>>y = matlab4geek(2)

07-Feb-2013 09:51:01
input x :2

y =

6

Mais pour le faire taire il suffit de faire:

[blablabla,y] = evalc(‘matlab4geek(2)’);

Le ; est très important !

blablabla vous l’aurez compris aura capturé les lignes et y la valeur que je souhaite récupérer.

Bref donc le gars qui veut utiliser mon soft sans display il n’a qu’à l’appler via evalc et moi ça m’évite 3000 if-else à implémenter ;)

Laisser un commentaire