2013-09-27 109 views
1

我在MATLAB上是相當新的,所以如果我說的東西是完全錯誤的,請原諒。我正在嘗試編寫一個小程序,該程序從擴展名爲.xlsx的特定目錄中讀取文件,然後將列分配給向量。當我手動放棄的文件名,我的計劃是這樣的:從相同擴展名的目錄獲取文件名,但沒有擴展名(MATLAB)

files = {'130926','130927'} 
file_number = 1; 
file_amount = length(files); 
while file_number <= file_amount 
file_name = files(file_number); 
cd('C:\place_where_I_store_my_files'); 
A = xlsread(char(strcat(file_name))); 
J = A(:,1); 
J_sp = A(:,2); 
file_number = file_number + 1 
end 

我已經試過自動至極之間的很多不同的東西在文件閱讀:

files = {'*.xlsx'} 

但是這一切都產生錯誤。 感謝您的閱讀。

馬蒂亞斯

+0

什麼錯誤,是它給您?這種信息使您更容易幫助您。 – iamnotmaynard

回答

0

FYI,這爲我做:

files = dir('C:\Users\Matthias\Desktop\KUL\2e_Master\Thesis\MBR_data\MBR_online\*cs.xlsx') 
file_number = 1; 
file_amount = length(files); 
while file_number <= file_amount 
file_name = files(file_number).name; 
cd('C:\place_where_I_store_my_files'); 
A = xlsread(char(file_name)); 
J = A(:,1); 
J_sp = A(:,2); 
file_number = file_number + 1 
end 

問候, 馬蒂亞斯

1

使用dir功能用通配符搜索。

my_path = 'C:\place_where_I_store_my_files'; 
xlsfiles = dir(fullfile(my_path, '*.xlsx')); 
for ii = 1 : length(xlsfiles) 
    disp(fullfile(my_path, xlsfiles(ii).name)); 
end 

上面的代碼將顯示所有XLSX目錄中的文件指定的名稱。

+0

感謝您的回覆。它確實顯示了該目錄中存在的文件名,但我需要它將它們放入一個不能用於上面代碼的數組中。所以上面代碼生成的文件名應該放在$ files = {} $中。它應該只是沒有擴展名.xlsx的名稱。 – Matthias

+0

@Matthias我不明白'$ files = {} $'是什麼意思。要獲取文件名稱,請調用['fileparts'](http://www.mathworks.com/help/matlab/ref/fileparts.html)函數。 – Praetorian

+0

當我使用'fileparts'函數時,它給出了一個錯誤,說輸入必須是一個行向量或字符... – Matthias

0

如何: -

>> list = dir('C:\path\*.xlsx'); 
>> names=cellfun(@(x)x(1:end-5),{list.name},'UniformOutput', false); 

訪問使用names{1}names{2} ...等等

這將創建從dir命令接收的姓名的細胞起作用的匿名函數。

類型:help dirhelp cellfun在命令提示符下更多的細節

+0

感謝您的回覆。我試過這個在我的目錄,它的工作。但不完全。除文件夾中存在的文件的三個文件名外,還將返回[1x0個字符]兩次。我認爲,因爲這個,當我使用名稱作爲輸入時,其餘的代碼會產生錯誤。 – Matthias

+0

@Matthias是的,必須有一些其他的代碼產生額外的'[1x0 char]',你可以驗證這一點,只需輸入這個命令窗口 – P0W

+0

@POW我只使用你的代碼和'[1x0 char]'仍然那裏... – Matthias

相關問題