2016-12-21 186 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');