可以在字符串中使用三个选项之一的变量(MATLAB)?

时间:2015-07-01 16:30:50

标签: string matlab

我正在尝试在循环中按顺序加载文件以获得长函数。我的文件格式为var1_var2.mat

我的循环结构形式为:

directory = place

for var= 1 : somebound
    for var2= 1: someotherbound
        curFname = [directory in2str(var1) '_' in2str(var2) '.mat'];

        load files and do stuff 

    end
end 

但是,我已将命名约定更改为一组文件可以具有第三个下划线的位置,可以是1,2或3,具体取决于从中获取数据的某些条件。

所以现在我的文件格式从1_1.mat格式化为1_1_3.mat

如何在我的curFname = [...]代码行中创建第三个字符,可以使用不同的第三项1,2或3?它需要定义为变量,因为没有1_1_1.mat,1_1_2.mat和1_1_3.mat,可能只是1_1_1.mat

示例,可能有1_2_3.mat。但不是1_2_1.mat或1_1_1.mat

2 个答案:

答案 0 :(得分:1)

你可以通过try / catch这样做:

success = false;
for it1 = 1:range1
    for it2 = 1:range2
        for it3 = 1:3
            filename = strcat(int2str(it1), '_', int2str(it2), '_', int2str(it3), '.mat');
            try
                load(filename);
                success = true;
            catch
                continue;
                success = false;
            end
            if success
                %do some amazing stuff
            end
        end
    end
end

另一种方法是获取所有.mat文件并加载它们

files = dir('*.mat');
for file = 1:length(files)
    load(files(file).name);
    %do some even more amazing stuff
end

如果目录中还有其他.mat文件,并且您不想加载它们,那么您可以使用正则表达式:

files = dir('*.mat');
for file = 1:length(files)
    filename = files(file).name;
    if regexp(filename, '[1-9][0-9]*_[1-9][0-9]*_[1-3].mat')
        load(filename);
        %do some even more amazing stuff
    end    
end  

如果您不知道regexp,它与另一个字符串上的字符串模式匹配,您会在MATLAB Doc上找到更多信息。在我的例子中,

  

[1-9]是1到9之间的任何数字

     

[1-3]与3

相同      

*表示前一个字符可以出现一次或多次。因此[0-9]*nothing [0-9][0-9][0-9][0-9][0-9][0-9]等。

     

您可以找到有关MATLAB正则表达式here

的更多信息

编辑:

由于正则表达式的特定语法,我没有[1-n]。这有点难以解释,但会尽我所能:

regexp匹配字符,输入[1-x],我基本上对MATLAB说“我想要一个字符代码在字符代码1和字符代码之间的字符of x“。因此输入[1-9]是有道理的。

另一方面10或25或任何高于9的数字。让我们以 39 为例。 39不是字符,它由2个字符组成。因此,正则表达式中的匹配39匹配3,然后是9.因此[1-39]将不起作用,但[1-3][0-9]|[1-9]将会起作用。

答案 1 :(得分:0)

dir命令对于这些事情很有价值 - 你会在某个文件夹中得到一个充满字符串的单元格数组。与操作系统非常相似,您可以获得文件名,修改的最后日期等信息。

鉴于此,我相信你的问题的答案在于控制流程,即使用条件语句if,while或者任何适合你需要的语句。例如:

for var = 1 : somebound
    variable = dir('foldername');
    if (check your strings and process) ...

等等。从本质上讲,您将需要许多有用的MATLAB字符串命令,如strfind,strcmp和strlen。安排你的逻辑以满足你的格式。