importing variables in compiled package

조회 수: 3 (최근 30일)
Richard
Richard 2011년 6월 13일
Hi all,
I have some matlab code from which I've extracted the important variables to a separate file that I called config.m...
%comment comment comment a = 1; %comment comment comment b = 2; ...
When I start up my code, this file is "sourced" by running config.m to load the parameters.
This has worked well for me while test/debugging. Now I want to compile the code, but keep the same configuration so I can tweak all the parameters for each run. One way around this I have found is to load my config file line by line, and use the eval function to get the variables into scope. Is this breaking any sort of license agreement if I distribute it? If so, are there any more valid ways to accomplish the same thing?

답변 (3개)

Walter Roberson
Walter Roberson 2011년 6월 14일
You are correct that it would be a license violation, as your executable would be providing the same functionality as the MATLAB command line by way of the user providing a config.m file that happened to include an input / eval loop.
You are responsible for ensuring that your program is secure against these kinds of hacks.
This does not rule out the use of eval (though it would not be recommended as there are clear alternatives such as dynamic structure fields), but it does mean that you have to scan the input for validity instead of blindly eval()'ing it. And if you are going to scan it for validity, you might as well use a data file.
  댓글 수: 5
Richard
Richard 2011년 6월 14일
After some minimal thinking, I realize I could do the same as I was doing but filter out any lines that call functions. So I could throw out any lines that contain [, ], (, or ) and then there is no exposure to internal functions.
Walter Roberson
Walter Roberson 2011년 6월 14일
Note that some functions do not require arguments -- for example, "now" and "eps" .
I suspect you could reduce it down to checking whether the lines are of the form
name = numericvalue
and validate the name via ismember() against the set of names you specifically want to allow to be set.

댓글을 달려면 로그인하십시오.


Fangjun Jiang
Fangjun Jiang 2011년 6월 13일
I think you are doing perfectly fine regarding license or good practice. You can put your parameters in a M-script or a M-function. Just make sure you deal with the base workspace or function workspace properly.

Chirag Gupta
Chirag Gupta 2011년 6월 13일
Why don't you save the variables in a MAT file and just include the file when compiling it! Better way would be for your compiled application to have an interface that allows you to specify a MAT file( using uigetfile ). Then you could save multiple config params in separate MAT files and just choose the desired one at runtime
  댓글 수: 3
Chirag Gupta
Chirag Gupta 2011년 6월 14일
Agreed, but then the correct way (in my opinion) should be to save it as a text file and use MATLAB file i/o to read the values. Saving it as a MATLAB file (M) doesn't seem like the right approach!
Richard
Richard 2011년 6월 14일
What sort of matlab i/o do you recommend? I'd like to keep the format of config.m similar to what I have above.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by