2016-12-21 155 views
1

我已经写下了下面的代码。基本上它是检查一些路径是否已经在matlab搜索路径中。如果找不到,则会添加路径。用strcmp搜索matlab搜索路径

问题是strcmp总是返回一个零矢量,尽管路径实际上已经存在于currPath中。我实际上从currPath拷贝了一个路径来检查我是否得到了正确的值。不知道这是为什么?

% get current path 
currPath = strsplit(path, ';')'; 
currPath = upper(currPath); 

% check if required paths exist - if not add them 
pathsToCheck = ['C:\SOMEFOLDER\MADEUP']; 
pathsToCheck = upper(pathsToCheck); 

for n = 1 : length(pathsToCheck(:, 1))  
    index = strcmp(currPath, pathsToCheck(n, 1));  
    if sum(index) > 0  
     addpath(pathsToCheck{t, 1}, '-end');   % add path to the end 
    end  
end 

% save changes 
savepath; 
+2

在这个例子中,'pathsToCheck'是一个'char',所以'length(pathsToCheck(:, 1))'将是单个字符的长度(== 1)。同样,'pathsToCheck(n,1)'总是一个字符,所以'strcmp'失败。那么,这只是在这个例子中是真的吗?如果是,请更新:)如果不是,问题解决。 –

+0

谢谢!这对我来说有点愚蠢,漫长的一天 – mHelpMe

+0

那么,那是你的问题吗?或者只是一个例子中的问题? –

回答

2

的问题是,你已经定义pathsToCheck作为一个字符数组,单元阵列(我认为这是你预期的,你通过它循环的方式)。

与其使用for循环,您可以使用ismember来检查字符串的另一个单元数组中是否存在字符串单元数组的成员。

% Note the use of pathsep to make this work across multiple operating systems 
currentPath = strsplit(path, pathsep); 
pathsToCheck = {'C:\SOMEFOLDER\MADEUP'}; 

exists = ismember(pathsToCheck, currentPath); 
% If you want to ignore case: ismember(upper(pathsToCheck), upper(currentPath)) 

% Add the ones that didn't exist 
addpath(pathsToCheck{~exists}, '-end');