Reading the required variables for a function

Is there a function that will read the number and names of variables needed to run a function. I'm working on a brute force solution now that just opens the function as a text file and searches for the function declaration then reads the strings between the parenthesis.

2 Commenti

Do you want the number of variables or their names?
Both, your answer is a viable option, but I don't see how it will read the variables if the function call is not the first line of the .m file.

Accedi per commentare.

Risposte (3)

Azzi Abdelmalek
Azzi Abdelmalek il 5 Nov 2013
Modificato: Azzi Abdelmalek il 5 Nov 2013
fid = fopen('file.m');
line=''
while isempty(line)
line=fgetl(fid)
end
fclose(fid);
v=regexp(line,'(?<=\().+(?=\))','match')
n=strfind(v{1},',') % number of variables
%If you want their names
w=regexp(v{1},',','split')

6 Commenti

This is great unless the function call is not on the first line of the code.
Azzi Abdelmalek
Azzi Abdelmalek il 5 Nov 2013
Modificato: Azzi Abdelmalek il 5 Nov 2013
the test while isempty(line) checks if the first lines are empty
Walter Roberson
Walter Roberson il 5 Nov 2013
Modificato: Walter Roberson il 5 Nov 2013
Remember comment lines, and comments more generally.
Watch out for continuation lines.
For comment we can add a test
if line(1)=='%'
line=''
end
Comments can start anywhere on a line. Also, blanks are permitted on lines.
line = regexprep(line, {'%.*', '^s+'}, {'', ''});
The first character of line is always different from ' '

Accedi per commentare.

Adam
Adam il 5 Nov 2013
Modificato: Adam il 5 Nov 2013
Thanks for the help Azzi. I never used the regexp function before. It works really well in this application.
function [nvars,vars] = req_variables(filename)
% % Open the file for reading only.
[fid,msg] = fopen(filename,'r');
if fid <= 0
disp('Was not able to open file');
disp(msg)
return;
end
% Read the file, line by line, until we find the function call
line = ' ';
while (~strcmp(line(1:8),'function'))
line = fgetl(fid);
end
% Read the variable names and number from the line
v=regexp(line,'(?<=\().+(?=\))','match');
nvars =strfind(v{1},','); % number of variables
vars=regexp(v{1},',','split');
%Close the file
fclose(fid);

Categorie

Richiesto:

il 5 Nov 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by