How to add a class in the MATLAB path [duplicate] - matlab

I have 2 paths :
C:\controller\functions\verifyModel.m
C:\OGVD\prod\KMLP\controller\controllerStatus.m
verifyModel.m
classdef verifyModel
methods(access=public)
function...
end
end
controllerStatus.m
classdef controllerStatus < verifyModel
.....
end
but when I run controllerStatus.m, I got an error as the class I used isn't in the path
how could I add verifyModel to the path ?

Before usage of controllerStatus use:
addpath('C:\controller\functions\')
Also, you might want to put in in a # folder. These folders are added to the path whenever they are visible, so as they are a subfolder of your current path(pwd).
Or add 'C:\controller\functions\' to your static matlab path, what I do not recommend.
See also this answer.

Related

Accept a specific type of file Matlab

I have a GUI using a Browe Button to search a file :
function Browse(app, event)
FileName,FilePath ]= uigetfile();
ExPath = fullfile(FilePath, FileName);
app.FileTextArea.Value = ExPath;
end
And i save the file Path in a Text Area.
I have another button that start a matlab script with the file path as parameter and so i would like to accept only a certain type of file (.ctm which is my own type of file) if possible like this :
if file is .ctm
do something
else
print('a .ctm file is needed')
Thanks for helping
There are two things you can do:
Display only the files with a certain extension with uigetfile()
[fileName, dataDir] = uigetfile('*.ctm', 'Select a *.ctm file', yourDefaultPth);
Verify that selected file has a .ctm extension
[data.dir,data.fileName,data.ext] = fileparts(fullfile(dataDir, fileName)); % dataDir and fileName from pt. 1
if strcmp(data.ext, '.ctm')
% do something
else
print('a .ctm file is needed')
end
Keep in mind that neither of the two will verify that the content of the file is the one you're expecting and if someone will manually modify extension of the file, your program will most likely crash. It's good for a start but if you want to do a more reliable check, you should verify that the content of the file is correct, not its extension.

Get a New Directory Name from Mkdir

I'm running a code in Maltab the creates directories through mkdir. Problem is, I'm creating their name by some logic on run-time, so I don't know what the dir name would be. I know I can first create the name as
string dirName = nameLogic();
mkdir(dirName);
but I would like to know the dirName from the created directory itself. Naivly, that would be
[outputdirName] = mkdir(fuzzylogicdirName);
I should add that I'm not religiously attached to mkdir, and another yet more suitable method might be in place.
Thanks
I might get you wrong. In any case what mkdir does is just creating a folder, hence the folder name must be known (possibly determined at run-time) before the call.
A structure like
folderName = folderNameLogic([run_time_variables]);
% # folderName = 'something_run_time_variables(1)_and_run_time_variables(2)'
status = mkdir(folderName)
if status == 1
disp(['success in creating folder ' folderName]);
else
disp(['ERROR in creating folder ' folderName]);
end
is thus necessary.
Clearly nothing prevents you from wrapping the call a function of yours returning the folder name. E.g.
function [folderName] = mkdir_retname(folderName)
status = mkdir(folderName);
if status == 0
folderName = '0';
end
end

Creating an instance of a class

Trying to create my first class in MATLAB but obviously am missing something.
So here is my class below.
classdef MyBank
properties
Balance;
CustName;
end
methods
function BA = MyBank()
BA.Balance = 0;
BA.CustName = 'Mr Blogs'
end
end
end
In the same path I have a m file. In this file I try to create an object from my class like so,
bank = MyBank;
I get the error message 'undefined function or variabel 'MyBank'? Not sure what I'm missing as the examples I have seen appear to do the same thing?
Also when typing BA in my constructor should there be any intellisense? Find it quite painful coding in Matlab.
Matlab doesn't understand ".
You shuold use BA.CustName = 'Mr Blogs'
Are you using Matlab or Octave? Octave understands ", but last time I checked classdef is not working.
To find the constructor with "intellisense", you should type "My" and then press tab. At least for me this works.
If this doesn't work for you, check that your file is named MyBank.m and double check if it is in your current working folder. Open the file in your edior window and execute it by pressing F5. Then a dialog should pop up, if your in another working directory.

MATLAB superclass can not be found on the MATLAB's search path

I have 2 paths :
C:\controller\functions\verifyModel.m
C:\OGVD\prod\KMLP\controller\controllerStatus.m
verifyModel.m
classdef verifyModel
methods(access=public)
function...
end
end
controllerStatus.m
classdef controllerStatus < verifyModel
.....
end
but when I run controllerStatus.m, I got an error as the class I used isn't in the path
how could I add verifyModel to the path ?
Before usage of controllerStatus use:
addpath('C:\controller\functions\')
Also, you might want to put in in a # folder. These folders are added to the path whenever they are visible, so as they are a subfolder of your current path(pwd).
Or add 'C:\controller\functions\' to your static matlab path, what I do not recommend.
See also this answer.

How to control where the function is run in MATLAB?

I would like to be able to run a function from the directory where it is defined.
Let's say this is my folder structure:
./matlab
./matlab/functions1
./matlab/functions2
and I have all directories in my MATLAB path, so I am able to call the functions that are in these directories.
Let's say my function "func" resides in 'matlab/functions1'. My function contains command
csvwrite('data.csv', data(:));
Now, if I call "func" from ./matlab, 'data.csv' gets created in ./matlab. If I call it from ./matlab/functions2, it will get created in that directory. But I would like for the function to write 'data.csv' always in the directory, where the function is defined (./matlab/functions1), no matter what my current directory is. How can I achieve that?
mfilename called from 'inside' a function returns the function path and name.
fullPath = mfilename('fullpath');
pathString = fileparts(fullPath);
dataPath = [ pathString filesep 'data.csv'];
csvwrite(dataPath, data(:));
In addition to what #zellus suggested, you can use functions to get information on a specific function, regardless of any m file being executed at the same moment. You set the function of interest by giving functions the function handle:
funInfo = functions(#func);
fullPath = funInfo.file;