Hello all,
I want to write a function that loops through all the functions in a given directory and runs them.
For each specific function, I have a variable called FunInputs that tells me what the argument is for each function. For example, the input argument for the function titled 'A' is '930'.
FunInputs={'A','930';'B','804';'C','812';'D','830';'E','811';'F','827';'G','931';'H','932';'I','800';'J','814';'K','805';'L','1012';'M','933';'N','820';'O','1010';'P','802';}
In addition, all functions in the directory share the input 'FileCode'. So, when I run function 'A' it looks like:
output = A('FileCode','930');
I'm feeling really lost as to how to go about writing a function that can automatically process my list of functions according to their specific inputs (sorry….I'm a newbie!)
this is what I have so far…
function [AllFunOutputs] = RunAllFuns(FileCode, FunInputs) files = what('\MATLAB\Funs'); % get all file names in directory 'Funs'
funsExist = files(arrayfun(@(f) isMatFun(f), files)); % make sure the files in the directory are functions
funNames = arrayfun(@(f) {stripDotM(f)}, funsExist); % strip the '.m' suffix from all file names
% below, match the function name with its argument
k = 1; for i=1:length(FunInputs) if(strncmp(FunInputs(i,1),files,1)== 1)) funNames(k,1) = FunInputs(i,2); k = k+1; end end AllFunOutputs = cellfun(@(f) {executeStrAsFun(char(f), T)}, funNames); % run the files as functions and combine the results in a matrix
end function [AllFunOutputs] = executeStrAsFun(fname, FileCode, FunInput) try fun = str2func(fname); % convert string to a function
results = fun(FileCode,FunInput); % run the function
catch err fprintf('Function: %s\n', err.name); fprintf('Line: %s\n', err.line); fprintf('Message: %s\n', err.message); results = ['ERROR: Couldn''t run function: ' fname]; end end
Thank you so much in advance for your time, help, and consideration!!!!!
Best Answer