由於文件說,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'));
如果你在MATLAB目錄數據,你可以使用'userpath' – Jonas