If you are writing a code where the user is asked to give a number, it can be a good idea to check whether or not the inserted value was really a number instead of something else like a letter or some strange character (%, / _ , etc).
The easiest way to do it is asking for a string input and then attempting (via str2num) to make the conversion string to number. If the conversion fails, then the input wasn't a number!
Here a very simple code that does the job.
------------------------------------------------------------------------------------
function [varargout]=CheckIfNumber(s)
%[varargout]=CheckIfNumber(s)
% s is a string
% varargout is the converted number or row vector
num=str2num(s);
if (isempty(num)==0)
varargout{1}=num;
end
------------------------------------------------------------------------------------
My Tips and Tricks for C#, C, C++, MatLAB, Java, LaTeX, Python and more!
Thursday, October 11, 2012
Wednesday, October 3, 2012
How to get a timestamp (date + time) in Matlab
To complete my Matlab interface for data fitting, I needed a Timestamp function, namely a function combining date and time into a single string.
This can be useful when you want to save files having the same base "name" (e.g. foo-x11.dat, foo-x12.dat, etc) but created at different times.
In Matlab the timestamp is obtained with the command
>>datestr(clock, 0)
which output is (at the time of this post!!!)
10-nov-2012 14:10:20
Unfortunately this string cannot be used into a filename due to the presence of colons.
In addition I would like to have a string starting with "year-month-day" because it is a much more convenient way to name files created at different times.
My version of TimeStamp that produces a string in the format :
year-month-day-hours-h-minutes-m-second-s
as for example
2012-11-10-14h10m20s
Here is the code! Enjoy!
And keep following this blog and my other one. It's totally worth it!
----------------------------------------------------------------
function [s]=TimeStamp
%[s]=TimeStamp
% time stamp in the format
% year-month-day-hours-h-minutes-m-second-s
% Get current time as date vector
t=clock;
% convert date vector into the string: year-month-day
yyyy_mm_dd=datestr(t, 29);
% convert date vector into the string: day-month-year[blank]hours:minutes:seconds
s=datestr(t, 0);
% get index of the blank
index=find(s==' ');
% remove the string that is before the blank
s=s((index+1):end);
% get the indices of the colons ":"
ii=find(s==':');
%change the first colon into "h" and the second one into "m". Add an "s" at the end of the
%string
h_m_s=strcat( s(1:(ii(1)-1)), 'h', s( (ii(1)+1): (ii(2)-1)), 'm', s( (ii(2)+1):end), 's');
% concate the two strings
s=strcat(yyyy_mm_dd, '-', h_m_s);
----------------------------------------------------------------
Alternatively, you can use the very short code provided by the first commenter :)
In this case:
function s=TimeStamp
s=strcat(datestr(clock,'yyyy-mm-dd-HHMM'),'m',datestr(clock,'ss'),'s');
----------------------------------------------------------------
Or the code built on the suggestion provided by the another commenter :)
function s=TimeStamp
tmp = strrep(datestr(clock), ':' , '-' );
s= strrep(tmp, ' ' , '-' );
ii=find(s=='-');
s(ii(4))='h';
s(ii(5))='m';
s=strcat(s, 's');
This can be useful when you want to save files having the same base "name" (e.g. foo-x11.dat, foo-x12.dat, etc) but created at different times.
In Matlab the timestamp is obtained with the command
>>datestr(clock, 0)
which output is (at the time of this post!!!)
10-nov-2012 14:10:20
Unfortunately this string cannot be used into a filename due to the presence of colons.
In addition I would like to have a string starting with "year-month-day" because it is a much more convenient way to name files created at different times.
My version of TimeStamp that produces a string in the format :
year-month-day-hours-h-minutes-m-second-s
as for example
2012-11-10-14h10m20s
Here is the code! Enjoy!
And keep following this blog and my other one. It's totally worth it!
----------------------------------------------------------------
function [s]=TimeStamp
%[s]=TimeStamp
% time stamp in the format
% year-month-day-hours-h-minutes-m-second-s
% Get current time as date vector
t=clock;
% convert date vector into the string: year-month-day
yyyy_mm_dd=datestr(t, 29);
% convert date vector into the string: day-month-year[blank]hours:minutes:seconds
s=datestr(t, 0);
% get index of the blank
index=find(s==' ');
% remove the string that is before the blank
s=s((index+1):end);
% get the indices of the colons ":"
ii=find(s==':');
%change the first colon into "h" and the second one into "m". Add an "s" at the end of the
%string
h_m_s=strcat( s(1:(ii(1)-1)), 'h', s( (ii(1)+1): (ii(2)-1)), 'm', s( (ii(2)+1):end), 's');
% concate the two strings
s=strcat(yyyy_mm_dd, '-', h_m_s);
----------------------------------------------------------------
Alternatively, you can use the very short code provided by the first commenter :)
In this case:
function s=TimeStamp
s=strcat(datestr(clock,'yyyy-mm-dd-HHMM'),'m',datestr(clock,'ss'),'s');
----------------------------------------------------------------
Or the code built on the suggestion provided by the another commenter :)
function s=TimeStamp
tmp = strrep(datestr(clock), ':' , '-' );
s= strrep(tmp, ' ' , '-' );
ii=find(s=='-');
s(ii(4))='h';
s(ii(5))='m';
s=strcat(s, 's');
Tuesday, October 2, 2012
Make Matlab listing ONLY subfolders cointained into a folder
From the Matlab Command Window when you type "dir" you get a list of files and folders contained in your working directory.
The question is: how can you get ONLY the folders?
Here is the solution from stackoverflow.
NOTE
In the following function the output "nameFolds" is a cell variable type!!!
------------------------------------------------------------------------------------------
function nameFolds=ListSubfolders(pathFolder)
d = dir(pathFolder);
isub = [d(:).isdir];
nameFolds = {d(isub).name}';
nameFolds(ismember(nameFolds,{'.','..'})) = [];
-----------------------------------------------------------------------------------------
Credits:
stackoverflow
The question is: how can you get ONLY the folders?
Here is the solution from stackoverflow.
NOTE
In the following function the output "nameFolds" is a cell variable type!!!
------------------------------------------------------------------------------------------
function nameFolds=ListSubfolders(pathFolder)
d = dir(pathFolder);
isub = [d(:).isdir];
nameFolds = {d(isub).name}';
nameFolds(ismember(nameFolds,{'.','..'})) = [];
-----------------------------------------------------------------------------------------
Credits:
stackoverflow
Subscribe to:
Posts (Atom)