Comments on: Coding challenge on input parsing https://blogs.mathworks.com/pick/2013/02/01/coding-challenge-on-input-parsing/?s_tid=feedtopost Jiro and Sean share favorite user-contributed submissions from the File Exchange. Sat, 07 Jan 2017 02:35:58 +0000 hourly 1 https://wordpress.org/?v=6.2.2 By: Jiro Doke https://blogs.mathworks.com/pick/2013/02/01/coding-challenge-on-input-parsing/#comment-18991 Wed, 06 Feb 2013 23:17:03 +0000 https://blogs.mathworks.com/pick/?p=4267#comment-18991 Thanks Mikko for your entry! I will parse through this and write up an entry on this.

Let me send you an email to get your contact info so that we can send you some MathWorks gifts!

]]>
By: Mikko https://blogs.mathworks.com/pick/2013/02/01/coding-challenge-on-input-parsing/#comment-18971 Mon, 04 Feb 2013 08:00:41 +0000 https://blogs.mathworks.com/pick/?p=4267#comment-18971 Sorry, I didn’t put my code inside a function.

function res = validateInputs(varargin)

%%%code%%%

end

]]>
By: Mikko https://blogs.mathworks.com/pick/2013/02/01/coding-challenge-on-input-parsing/#comment-18969 Mon, 04 Feb 2013 07:31:30 +0000 https://blogs.mathworks.com/pick/?p=4267#comment-18969 Here’s my effort:

ipObj1 = inputParser;
ipObj1.addRequired('x',@(x)validateattributes(x,{'numeric'},{'finite','2d'}));
ipObj1.addRequired('y',@(x)validateattributes(x,{'numeric'},{'finite','2d'}));
ipObj1.addRequired('b',@(x)validateattributes(x,{'numeric'},{'finite'}));
keys = {'transparency','orientation','cmap'};
res = '';
res_ipObj2 = '';
res_ipObj3 = '';
try
    ipObj2 = ipObj1.createCopy;
    ipObj2.addOptional('linespec','',@(x)ischar(x) && ~any(strcmp(x,{'alpha',keys{:}})));
    ipObj2.addOptional('useAlpha','',@(x)strcmp(x,'alpha') || ishandle(x));
    ipObj2.addOptional('hax','',@(x)strcmp(x,'alpha') || ishandle(x));
    ipObj2.addParamValue('orientation','horiz',@(x)any(validatestring(x,{'horiz','vert'})));
    ipObj2.addParamValue('transparency',0.2,@(x)validateattributes(x,{'numeric'},{'scalar','positive'}));
    ipObj2.addParamValue('cmap',[],@(x)validateattributes(x,{'numeric'},{'2d','finite','size',[size(x,1),3]}));
    ipObj2.parse(varargin{:});
    res_ipObj2 = ipObj2.Results;
    res = res_ipObj2;
catch me
    try 
        ipObj3 = ipObj1.createCopy;
        ipObj3.addOptional('linespec','',@(x)ischar(x) && ~any(strcmp(x,{'alpha',keys{:}})));
        ipObj3.addOptional('x1',[],@(x)validateattributes(x,{'numeric'},{'finite','2d'}));
        ipObj3.addOptional('y2',[],@(x)validateattributes(x,{'numeric'},{'finite','2d'}));
        ipObj3.addOptional('b2',[],@(x)validateattributes(x,{'numeric'},{'finite'}));
        ipObj3.addOptional('linespec2','',@(x)ischar(x) && ~any(strcmp(x,{'alpha',keys{:}})));
        ipObj3.addOptional('useAlpha','',@(x)strcmp(x,'alpha') || ishandle(x));
        ipObj3.addOptional('hax','',@(x)strcmp(x,'alpha') || ishandle(x));
        ipObj3.addParamValue('orientation','horiz',@(x)any(validatestring(x,{'horiz','vert'})));
        ipObj3.addParamValue('transparency',0.2,@(x)validateattributes(x,{'numeric'},{'scalar','positive'}));
        ipObj3.addParamValue('cmap',[],@(x)validateattributes(x,{'numeric'},{'2d','finite','size',[size(x,1),3]}));
        ipObj3.parse(varargin{:})
        res_ipObj3 = ipObj3.Results;
        res = res_ipObj3;
        
    catch me2%345345
        res_ipObj3 = '';
    end
    res_ipObj2 = '';
end
if isempty(res_ipObj2) && isempty(res_ipObj3)
    try
        ipObj4 = ipObj1.createCopy;
        ipObj4.addOptional('useAlpha','',@(x)strcmp(x,'alpha') || ishandle(x));
        ipObj4.addOptional('hax','',@(x)strcmp(x,'alpha') || ishandle(x));
        ipObj4.addParamValue('orientation','horiz',@(x)any(validatestring(x,{'horiz','vert'})));
        ipObj4.addParamValue('transparency',0.2,@(x)validateattributes(x,{'numeric'},{'scalar','positive'}));
        ipObj4.addParamValue('cmap',[],@(x)validateattributes(x,{'numeric'},{'2d','finite','size',[size(x,1),3]}));
        ipObj4.addOptional('linespec','',@(x)ischar(x) && ~any(strcmp(x,{'alpha',keys{:}})));
        ipObj4.parse(varargin{:});
        res = ipObj4.Results;
    catch me
        error(me.identifier,me.message)
    end
end
if ishandle(res.useAlpha)
    tmp1 = res.useAlpha;
    tmp2 = res.hax;
    res.hax = tmp1;
    res.useAlpha = tmp2;
end
]]>