使用varargin输入作为结构名称和字符串

时间:2013-08-12 14:58:12

标签: matlab iterator variadic-functions

有没有办法以多种不同的形式使用varargin输入。我希望varargin输入成为结构的名称,但我也希望它被传递到fprintf,它不接受单元格或结构数组。如果我有这样的功能:

function[] = myfunc(varargin)
for k = varargin
    for m = 'ABC'
        for n = 1:10
            varname = sprintf('%c%d',m,n);
            filename = sprintf('Images\\%s',varname);
            fprintf('Take measurement %s for %s\n',k,varname);
            image = imread(fullfile(filename));
            pause
            cursor_info = evalin('base','cursor_info');
            p1 = cursor_info(2).Position
            p2 = cursor_info(1).Position
            [d,s] = measure(p1,p2)  %measure is a separate function in my directory 
            k.(varname) = [d,s] 
        end
    end
    save('Distances,'k','-append')
end

我的功能用于分析几张图片,因此循环显示ABC和1:10。如果我用“M1”,“M2”,“M3”的输入调用该函数,我希望该函数创建结构M1,M2和M3,其中A1,B1,C1 - A10,B10,C10作为字段名称。 [d,s]将保存在使用imagesc GUI和函数measure找到的每个字段中的数据。

问题是在循环迭代中我希望将varargin输入输入到fprintf中,并且我还希望varargin输入成为结构名称。我可以编辑代码,以便fprintf使用函数char接受输入。但是有可能让函数中的输入成为填充数据的结构名称吗?如果是这样,解决方案仍然必须允许迭代器k传递到fprintf。

1 个答案:

答案 0 :(得分:1)

您可以拥有一个包含所有k - s的结构,然后您可以使用'-struct'选项保存它以将其“剥离”到其字段中:

function[] = myfunc(varargin)
for k = varargin
    for m = 'ABC'
        for n = 1:10
            % your stuff here... I am too lazy to copy it...
            [d,s] = measure(p1,p2)  %measure is a separate function in my directory 
            meta.(k{1}).(varname) = [d,s] ; % note the {1} for k, loop over cell elements
        end
    end
    save('Distances','meta','-struct','-append'); % not 100% sure -append wirks with -struct, you'll have to verify that...
end