2016-01-21 228 views
0

以下是我正在處理的一段代碼,它基於前一個評論的另一個示例。在第一行中,我做了什麼路徑?我是否一直延伸到Macintosh HD/Users /..../ Documents/MATLAB(該文件夾中的MATLAB文件夾是我正在分析的ascii文件的存儲位置),還是從另一個位置開始?我只是不確定在下面的例子中用什麼來替換'路徑','到','文件夾'。我更加困惑,因爲在我的MATLAB窗口中顯示的當前目錄是存儲我正在使用的文件的正確目錄。在這種情況下,我該如何處理全文件行?我也試圖顯示新截斷的文件的內容。我怎麼做?謝謝!不確定路徑位置的fullfile命令語法

folder = fullfile('path', 'to', 'folder'); 

    f = dir(fullfile(folder, '*.asc')); 
    matrices = struct(); 
    for ii = 1 : numel(f) 
     name = fullfile(folder, f(ii).name); 
     O = dlmread(name); 
     matrices.(f(ii).name) = O(1:80,:); 
    end 
+0

如果你在MATLAB目錄數據,你可以使用'userpath' – Jonas

回答

1

由於文件說,fullfile可以構建一個文件名從它的部分,而不必擔心是否使用/或\作爲文件分隔符,沒有舊的做事

filename = ['path' filesep 'to' filesep 'files']; 
真正混亂的方式

甚至更​​糟!

folder = '/path/to/file'; 

如果您嘗試在操作系統之間切換,則會遇到各種問題。

在您所提供的例子可能是

folder = fullfile('Users', 'Documents', 'MATLAB') 

邊注:請不要實際上您的數據存儲文件夾中

你是正確的,如果你的文件試圖加載是在你的當前目錄,那麼你不需要folder變量,因爲如果你只是鍵入dlmread(filename)它將工作。

但問題是,這是要求,用戶在一個特定的目錄中運行您的代碼,它可能不清楚該用戶是什麼文件夾。您提供的代碼更強大,因爲它不依賴於當前目錄。在我看來,最好的做法是永遠不要依賴當前目錄。在我看來,沒有什麼比看到某個人在MATLAB內更改目錄更糟了,所以他們可以訪問他們的數據!

記住因此保持什麼fullfile不,我會在下面標註

folder = fullfile('path', 'to', 'folder'); 

存儲你的代碼路徑到您的數據的生命。如果您的數據位於fullfile(pwd, 'data')中,這可以是絕對路徑(如您在您的問題中所述)'/Users/blah/data'或相對於當前目錄的路徑'data'。前者是我的首選方法。

f = dir(fullfile(folder, '*.asc')); 

這對尋找具有.asc擴展該文件夾中的所有文件/文件夾調用dir

name = fullfile(folder, f(ii).name); 

此行構建感興趣的文件的絕對路徑,因爲dir只返回文件名,而不是它住在(我最大的煩惱之一)的文件夾。

O = dlmread(name); 

然後很明顯這會使用提供的完整路徑讀取您的實際文件。

同樣,這裏真正的好處是你不必在特定的目錄下執行這段代碼。

因此,直接回答你的問題,現在你知道所有這一切。如果您的數據存在於當前目錄中,您可以設置folder當前目錄

folder = pwd; 

或者,如果你想善待別人和你的未來的自己,你可以指定一個絕對路徑(最好是作爲一個函數傳遞論點,而不是硬編碼)

function matrices = getfiles(folder) 
    f = dir(fullfile(folder, '*.asc')); 
    matrices = struct(); 
    for ii = 1 : numel(f) 
     name = fullfile(folder, f(ii).name); 
     O = dlmread(name); 
     matrices.(f(ii).name) = O(1:80,:); 
    end 
end 

matrices = getfiles(fullfile('user', 'defined', 'path', 'to', 'data')); 
+0

好了,如果我什麼都不做不是替換文件夾=完整文件(「路徑」更多, 'to','文件夾');與文件夾= pwd,解決我的目錄混淆。但是現在我該如何確認(通過顯示?)這段代碼實際上只保存了前80行?謝謝! – Svet

+0

@Svet我推薦閱讀**整個**答案,這樣你就可以理解爲什麼簡單地設置'folder = pwd'可能是一個壞主意。 – Suever

+0

@Svet儘可能到前80行,這就是這行'矩陣。(f(ii).name)= O(1:80,:);'。你可以自己嘗試來驗證。 – Suever