Reading the required variables for a function

1 次查看(过去 30 天)
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 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-11-5
Do you want the number of variables or their names?
Adam
Adam 2013-11-5
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.

请先登录,再进行评论。

回答(3 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-11-5
编辑:Azzi Abdelmalek 2013-11-5
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 个评论
Walter Roberson
Walter Roberson 2013-11-5
Comments can start anywhere on a line. Also, blanks are permitted on lines.
line = regexprep(line, {'%.*', '^s+'}, {'', ''});
Azzi Abdelmalek
Azzi Abdelmalek 2013-11-5
The first character of line is always different from ' '

请先登录,再进行评论。


Image Analyst
Image Analyst 2013-11-5

Adam
Adam 2013-11-5
编辑:Adam 2013-11-5
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);

类别

Help CenterFile Exchange 中查找有关 Variables 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by