废话不多说,先上代码。
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