廢話不多說,先上代碼。
clear;
clc;
for i = 1:30 %文件個數
filename = ['test (' num2str(i) ')' '.txt']; %文件名稱
delimiterIn = ' ';
headerlinesIn = 12; %文件中文字的行數
AllData = importdata(filename,delimiterIn,headerlinesIn); %獲取文件
DiseaseData = AllData.data(1:2025,4:129); %純數字矩陣
MeanDiseaseData = mean(DiseaseData); %進行平均值計算
s=strcat('A',num2str(i)) %輸出A1 A2 A3等,用於下面循環導出爲excel
xlswrite('testdata.xlsx',MeanDiseaseData,1,s); %逐行寫入excel
end
輸入格式:順序增加的文件名稱,以便用來循環。
這裏就涉及到怎樣批量重命名文件了
對於上述文件,首先全選。
全選後按 F2 ,輸入文件名如 test
在按下 CTRL + Enter ,效果如下圖。
ok,至此輸入文件名稱格式已經好了。
此時,如果我們輸入的txt文件中既有英文,又有數字,如下圖所示。
我們直接使用 textread 函數的話,是會報錯的。
所以我們代碼裏使用:
headerlinesIn = 12; %文件中文字的行數
AllData = importdata(filename,delimiterIn,headerlinesIn); %獲取文件
這樣就可以將txt文件中的非數字部分去除。
至此,我們已經將txt文件中的數字轉化爲Matlab裏的矩陣了,接下來進行一系列運算後,將其輸出爲excel。
如果直接調用
xlswrite(filename,A)
的話,每次循環產生的新數組A,都會將之前的寫入excel的數組覆蓋,不管循環多少次,最終指揮獲得一個數組。
那麼,我們想每一次循環導出到excel的數組都放到上一次數組的下面。
這時我們需要先了解一下下面這個函數:
xlswrite(filename,A,sheet,xlRange)
%writes to the specified worksheet and range.
比如 xlswrite(test,A,1,A1)
意思就是將A這個矩陣放到名爲test的excel文件中,具體放的位置爲sheet1,矩陣左上角爲A1。
那現在如果每次導入excel的矩陣爲一行的話,只需要第一次循環爲 xlswrite(test,A,1,A1),第二次爲 xlswrite(test,A,1,A2) 就好。
s=strcat('A',num2str(i)) %輸出A1 A2 A3等,用於下面循環導出爲excel
xlswrite('testdata.xlsx',MeanDiseaseData,1,s); %逐行寫入excel
程序裏的這兩行就實現了上述功能。
總結
到此我們就實現了
1、matlab批量導入txt文件
2、將txt文件中的英文去除
3、逐行將矩陣輸出爲excel