2013-11-21 121 views
0

我正在嘗試在MATLAB中編寫一個函數,它將採用矩陣中相當大的excel文件分組來讀取和分析數字(因爲有很多excel文件和大量數字)。我有主函數調用一個函數,該函數應該從main函數的矩陣中取出excel文件的名稱,並使用函數'xlsread'來讀取適當的單元格。每個文件具有相同的格式和相同數量的列和行,因此指定要讀取的單元格不是問題。但是,要將每個excel文件傳遞給讀取輸入函數,我將excel文件的名稱分配給一個變量,然後將其傳遞給read函數,然後將該變量傳遞給xlsread。但是,當我運行它時,出現錯誤:「文件名必須是字符串。」以下是我如何設置代碼的示例。MATLAB字符串變量

filenames = {'file1.csv','file2.csv',....}; 
for i=1:10 
    file=filenames(i); 
    data=readin(file); 
end 


function [sheetdata] = readin(filename) 
sheetdata = xlsread(filename,'cellrange','sheet'); 
end 

這可能嗎?

只是fyi,xlsread函數將參數作爲字符串。第一個參數是該文件的名稱,如:

「file1.xls」

第二個參數是細胞要導入的範圍內,例如:

「B2:D5」

這告訴MATLAB導入在包含在與B2的左上角和D5的右下角的矩形的單元中的數據。

感謝您的任何幫助。

編輯:我可以得到它,如果我直接分配變量的文件名,例如工作:

name='file1'; 
xlsread(name,'A1:C5'); 

所以我想這個問題就在於我如何設置文件名的矩陣。我想這樣設置它,因爲我不知道有多少張最終將不得不進行分析,並通過使用一個矩陣,我可以添加,刪除或編輯任何容易和快速的牀單,而無需改變我的代碼的任何其他部分。

回答

4

你的問題很可能是這條線:

file = filenames(i);

filenames,爲你定義它,是焦炭的矩陣。這意味着filenames(1)將返回f,不file1.csv爲你打算。正如我所看到的,最好的選擇是將文件名轉換爲單元陣列:

filenames = {'file1.csv','file2.csv',....}; 
for i=1:10 
    file=filenames{i}; 
    data=readin(file); 
end 
+0

謝謝,這樣做。在我的代碼中,我確實用{}指定了矩陣,但在文件= filenames {i}行中沒有{}。 – Kevin