您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“matlab如何讀取excel中的數(shù)據(jù)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“matlab如何讀取excel中的數(shù)據(jù)”這篇文章吧。
問題背景:有兩份系內(nèi)人員名單的表格,其中一個是系內(nèi)所有人員的名單(參加實訓(xùn)的名單中有三個人在總名單里沒有錄),一個是參加某項實訓(xùn)的人的名單,并非系內(nèi)所有人都參加了這次實訓(xùn)(我就是其中沒參加的一個)。那么現(xiàn)在要通過這兩張表格篩選出沒有參加的人的名單。
方法一:用眼睛找累死你,(雖然只有一百多人但是也夠折騰的)
方法二:我不知道用excel內(nèi)置的函數(shù)怎么實現(xiàn),可能比較麻煩把
方法三:用編程語言來實現(xiàn),(我只會matlab)
思路1:導(dǎo)入兩個Excel中人名的數(shù)據(jù)分別存在兩個cell中,用兩層循環(huán)遍歷它兩,對每個元素進行比較,如果相同就把總名單的的那個元素置空。(外層是總名單,內(nèi)層是參加實訓(xùn)的人的名單)
思路2:導(dǎo)入兩個Excel中人名的數(shù)據(jù)合并到一塊,然后用我之前講過的數(shù)組去重的一個好方法來去重(類似于,不能照搬,稍微改動),那剩下的不就是沒參加的人的名單么
有一個BUG:兩個人名一模一樣,那就去比較學(xué)號把
進行編程前,我需要先講一下matlab如何讀excel中的數(shù)據(jù)。
xlsread函數(shù)可以幫助我們讀取excel。
這里簡單講一個用法把
[num , txt , raw] = xlsread(filename)
Note:
num是指定excel中的數(shù)值部分
txt是指定excel中的文本部分,txt是一個元胞
raw數(shù)值文本在一塊,raw是一個元胞
不想要的用~來代替,不用~也行,反正你又不用,放那又不礙事
filename是指定excel的文件名(帶拓展名)
其余的用法讀者自行help一下,,輸入?yún)?shù)還可以帶上excel中的范圍,
第幾個sheet,等
思路1的Code:
clear
clc
[num_list,name_list]=xlsread('name_list.xlsx');% 導(dǎo)入總名單
[num_practice,name_practice]=xlsread('practice_list.xlsx');% 導(dǎo)入?yún)⒓訉嵱?xùn)人的名單
for i=1:length(name_list)%對總名單遍歷
name1=name_list{i};
for j=1:length(name_practice)%對實訓(xùn)名單遍歷
name2=name_practice{j};
if strcmpi(name1,name2)==1%看一下實訓(xùn)名單中的人名是否出現(xiàn)在總名單中
name_list{i}=[];%如果出現(xiàn)就把總名單中的這個元素置空
%這里你不能用小括號啊,用小括號每一次外層循環(huán)結(jié)束后都可能會把name_list給減少一個維度
%然后中途就可能會出現(xiàn)索引抽出矩陣的維度的情況
%用小括號,就直接把大cell中的一個小cell給刪去了
%用大括號,是把大cell中的小cell中的元素設(shè)為空,小cell還是存在的
break
end
end
end
%還記得cellfun么?不記得的話翻以前的文章去(直接點這句話就行)
disp(name_list(~cellfun('isempty', name_list)))
Result:運行代碼的一秒鐘后
思路2的Code:
clear
clc
[num_list,name_list]=xlsread('name_list.xlsx');% 導(dǎo)入總名單
[num_practice,name_practice]=xlsread('practice_list.xlsx');% 導(dǎo)入?yún)⒓訉嵱?xùn)人的名單
WholeName = [name_list;name_practice];%合并兩個名單
%下面對WholeName中的人名去重
names = {};
cnt = 0;
%思路就是兩個名單疊一塊一定有重名;
%有重名那么我下面的ind中一定有兩個或兩個以上的元素,把他們置空;
%如果是非重元素,則單獨保存后再置空;
%由于實訓(xùn)名單中最后添加了三個總名單中沒有的人名。
%所以用本方法會比上一種方法多出三個人來,
%不過這不影響,就是數(shù)據(jù)錄入的問題
while ~isempty(WholeName)
ind = find(strcmp(WholeName{1},WholeName) == 1);
if length(ind) >= 2
WholeName(ind) = [];
else
cnt = cnt + 1;
names{cnt} = WholeName{1};
WholeName(1) = [];
end
end
disp(names')
Result:(多出三個人名,為什么請看Code的注釋)運行代碼的一秒鐘后
這個方法二是寫著寫著想起來的,,配合著回顧之前學(xué)的東西。
以上是“matlab如何讀取excel中的數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。