2017-07-19 97 views
0

我的代碼發佈在下面。它正是我需要它做的。MATLAB循環通過excel文件

它讀入一個文件並繪製我需要的數據。如果我想讀另一個文件並讓它通過相同的代碼,而不必用不同的變量再次編寫整個文件,那可能嗎?我想存儲每個循環的矩陣。

正如你可以看到我得到的文件名爲:Oxygen_1keV_300K.xlsx

我有叫另外一個文件:Oxygen_1keV_600K.xlsx

等。

如何循環瀏覽這些文件而不必重新編碼整個事物?然後我想在同一個圖上繪製它們。最好爲每個文件存儲最終的矩陣Y和Ymean,這樣它們就不會被覆蓋。

clear 
clc 


files = ['Oxygen_1keV_300K','Oxygen_1keV_300K','Oxygen_1keV_600K','Oxygen_1keV_900K']; 
celldata = cellstr(file) 

k = cell(1,24); 
for k=1:24 
    data{k} = xlsread('C:\Users\Ben\Desktop\Oxygen_1keV_300K.xlsx',['PKA', num2str(k)]); 
end 

for i=1:24 
xfinal{i}=data{1,i}(end,1); 
xi{i}=0:0.001:xfinal{i}; 
xi{i}=transpose(xi{i}); 

x{i}=data{1,i}(:,1); 
y{i}=data{1,i}(:,4); 
yi{i} = interp1(x{i},y{i},xi{i}); 
end 

Y = zeros(10001, numel(data)); 
for ii = 1 : numel(data) 
    Y(:, ii) = yi{ii}(1 : 10001); 
end 


Ymean = mean(Y, 2); 

figure (1) 
x=0:0.001:10; 
semilogy(x,Ymean) 
+0

我建議使用['dir'](https://www.mathworks.com/help/matlab/ref/dir.html)或['ls'](https://www.mathworks.com/幫助/ matlab/ref/ls.html)函數來獲取文件列表,然後使用for循環來遍歷它們。 – Cecilia

+0

我不想獲取目錄中的所有文件。我正在考慮創建Ymean {i}。我怎樣才能給我想要循環的文件列表? – Jack

+0

您也可以手動定義文件路徑字符串的單元陣列,並循環執行。 – Cecilia

回答

1

單元格數組使得存儲可以作爲for循環的一部分訪問的字符串列表非常容易。在這種情況下,我建議把你的文件路徑中的單元陣列作爲用於您的呼叫xlsread

例如使用的字符串的替代品,

%The first file is the same as in your example. 
%I just made up file names for the next two. 
%Use the full file path if the file is not in your current directory 
filepath_list = {'C:\Users\Ben\Desktop\Oxygen_1keV_300K.xlsx', 'file2.xlsx', 'file3.xlsx'}; 

%To store separate results for each file, make Ymean a cell array or matrix too 
YMean = zeros(length(filepath_list), 1); 

%Now use a for loop to loop over the files 
for ii=1:length(filepath_list) 
    %Here's where your existing code would go 
    %I only include the sections which change due to the loop 
    for k=1:24 
     %The change is that on this line you use the cell array variable to load the next file path 
     data{k} = xlsread(filepath_list{ii},['PKA', num2str(k)]); 
    end 
    % ... do the rest of your processing 
    %You'll need to index into Ymean to store your result in the corresponding location 
    YMean(ii) = mean(Y, 2); 
end 

單元陣列是一個基本的matlab變量類型。對於一個簡介,我建議單元陣列中的文檔for creatingaccessing數據。

如果您的所有文件都在同一個目錄中,您還可以使用像dirls這樣的函數以編程方式填充單元陣列。

+0

我剛剛在我的例子中使用了文件名,但是如果這些文件不在你當前的目錄中,只需使用完整的文件路徑來使用文件名。我將編輯示例。 – Cecilia

+0

我明白了。你能否澄清我如何編輯Ymean成爲循環的一部分?目前Ymean將只是最後一個循環。我如何爲每個循環存儲Ymean?它只是Ymean {ii} – Jack

+0

您需要將Ymean定義爲單元陣列或矩陣。我剛剛添加到示例中。 – Cecilia