我需要利用MATLAB同时对40个数据文件进行数据处理,各个数据文件格式相似,处理方法相同。也就是说,用于处理这些数据文件的MATLAB程序是基本一样的,只有读入的文件名不同,其它地方都一样。

一开始我编了一个命令,用于处理这些数据,读入文件的文件名设为a.txt,将第一个数据文件改名为a.txt后进行运算,完毕后再将第二个文件改名为a.txt,重复这个过程40次。

后来我将这个程序复制、粘贴40次,成为一个大程序,第一次粘贴后将读入文件的文件名改为a1.txt,下一个改为a2.txt,以后依此类推,直到a40.txt,然后将40个数据文件的名字如法照该。最后运行MATLAB程序,一次就把40个数据文件都处理了。

再后来我觉得程序里的输入文件的文件名离得太远,改一次很不方便,要翻遍整个程序。而且,一模一样的程序应该用循环来实现,看起来容易看懂,用起来运算速度也快。

最后的办法是把所有文件名放在了一个矩阵里头,用了一个for循环,每循环一次调用一个字符串作文件名。下面以四个文件为例:

a=['a1.txt'

'a2.txt'

'a3.txt'

'a4.txt']; %如果是a10.txt,则前面的都要在最后加空格,因为矩阵要保证每一列的宽度一致

x=1; %给x赋初值为1

for i=1:4 %四个数据文件,所以进行四次循环

fid=fopen(a(x,1:6),'r') %将矩阵a的第一行(即字符串a1.txt)作为输入文件的文件名。因为每一个字符都被

认为是一列,所以读取1至6列才是完整的名称,a(x,1)读出来的值只是一个字母a

x=x+1; %将x的值自动加一,下次循环的时候就会读取第二列的值,即打开文件a2.txt

……

……

…… %进行数据的处理

end

利用上面的办法,程序很简洁,效果很好。如果换了下一批数据文件,只需要改动矩阵a的内容即可。

给多个文件命名的原理与此相同,不再赘述。

另一种方法更简便,介绍如下:

a=zeros(4,1)

for i=1:4

a(i,1)=load(strcat('a',num2str(i),'.txt'));

end

a=zeros(4,1)

for i=1:4

s=strcat('a',num2str(i),'.txt');

a(i,1)=load(s);

end

a=zeros(4,1)

for i=1:4

s=strcat('a',num2str(i),'.txt');

a(i,1)=importdata(s);

end

注:我是在每个记事本文件里放了一个数。放东西多的时候不能这样赋值给a,但是可以这样读取数据。

num2str()命令是将数值变为字符串;

strcat()是将多个字符串合并,字符串中间要用逗号(,)隔开;

load()命令和importdata()命令均可用来读取数据;

可以从其它文件夹读入数据,如将s=strcat('a',num2str(i),'.txt');改为s=strcat('F:\a',num2str(i),'.txt');是可以的。

注:个人使用新得,用load时一定要注意load();括号中是字符串

char格式就对了,可以用char()函数进行转换。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐