怎么用matlab读取多个数据文件?
1:如果文件名规则
% 文件目录:
my_pre_T='test' ;my_dir=' /home/my_calculation1/test1/';
%文件名前缀
%文件数目 fnum =1:32; %Read files for i=1:length(fnum) filename = [my_dir,prefix_T1 num2str(fnum(i))]; 然后dlmread,fopen等操作就不需详写了!与单个文件一样。end
2:文件夹数据批量读取的问题,命名无规则
在windows下很简单,ls函数便可以得到一个包含所有文件名的字符矩阵。可惜在unix下得到的是个字符行向量。当然,处理下也可以批量读取数据文件,不过不想再写了。因为另外一个函数也可以实现批量处理数据文件的功能。即dir函数
LS displays the results of the 'ls' command on UNIX.
On UNIX, LS returns acharacter row vectorof filenames separated by tab and space characters.
On Windows, LS returns anm-by-n character array of filenames, where m is the number of filenames and n is the number of characters in the longest filename found. Filenames shorter than n characters are padded with space characters.
下面介绍下使用dir函数读取文件夹中文件的程序
2.1 读取所有扩展名为.dat的数据文件,并进行处理。
matlab中,也可以使用通配符的。下面就来展示下:
假定.dat文件在/home/my_calculation1/test1/ 文件夹下,文件名符合matlab变量名的命名规则,要读取第二列的浮点数字为数组并以文件名为变量名。现在有一个文件夹里面有50个的.dat文件.每个文件大概三万行.两列,第一列是字符串,第二列是浮点数字. 批量读取这个文件夹里的.dat文件的第二列。读取完以后的数组变量名就是.dat的文件名
mydir='/home/my_calculation1/test1/';
temp1=dir([mydir,'*.dat']);
temp=dlmread(filename,'',0,1);num_temp1=length(temp1);for i1=1:num_temp1
filename=[mydir,temp1(i1).name];
论坛地址:http://bbs.sjtu.edu.cn/bbscon,board,MathTools,file,M.1255180893.A.html注意:如果直接使用 temp1=dir(mydir]);读取文件夹下所有文件,应当从第三个开始才是目录下的文件。另外,使用dir还可以遍历一个文件夹下的所有子文件夹。
eval([temp1(i1).name(1:end-4),'=temp;'])
dlmread,fopen等操作就不需详写了!与单个文件一样。
end
1、利用dir(外层文件夹)获取子文件夹;
2、利用dir(子文件夹)获取子文件夹中的文件信息;
3、遍历文件,做处理;对于遍历文件夹,也可以使用mathworks网站上的函数dirr轻松搞定。
下面是饮水思源论坛上的做法。没有进行整理。敬请原谅。
☆──────────────────────────────────────☆
tearful (pingr) 于 2009年09月14日16:57:15 星期一) 提到: 现在有个文件夹data中的数据想要批量处理,而data中有多个子文件夹,名字分别为0100 1,01002,…,每个子文件夹中有多个数据,假设为ECG.txt,PCG.txt,…。 现在我想要依次读取01001中的各数据进行处理,然后读取01002中的进行处理,依此类推 ,直到将data文件夹中的数据全都处理完。 我知道在labview中可以把文件夹的名字弄成字符拼接后可以不断的循环读取,不知道在m atlab中如何实现这样的功能?因为数据的仿真要在matlab中进行,麻烦各位高手帮帮忙啦 ,小女子先在这里谢过了~ ^_^ ☆──────────────────────────────────────☆ VictorTroska (Victor Troska) 于 2009年09月14日18:20:47 星期一) 提到: num2str ☆──────────────────────────────────────☆ cottonsugar (棉花糖) 于 2009年09月15日22:30:57 星期二) 提到: 到http://www.mathworks.com/matlabcentral/fileexchange/找一个叫dirr的m文件,然后 结合eval命令就可以轻松搞定 ☆──────────────────────────────────────☆ tearful (pingr) 于 2009年09月16日14:42:31 星期三) 提到: 非常感谢两位的解答。 因为这几天连着做实验,今天才有时间上网看一下,回复比较晚。 刚刚下载了名为dirr.m的文件。 LIST=DIRR('D:\data');可以实现将data中的子文件夹全都读取进来。存为一个名为LIST的 struct。以01001文件夹中的数据为例,可以知道每个数据的位置了,可是我应该如何读取 出来呢?例如LIST(1).isdir(1)中的是CPT.txt,但是我只能得到一个存有该文件名字和大 小等的struct格式,不知道应该如何读入该数据。 eval命令不知道该如何用?试了一下eval(LIST(1).isdir(1)),出现错误,说是该命令不能 做struct类。 麻烦cottonsugar及各位高手再给解释一下。谢谢大家了~ ☆──────────────────────────────────────☆ cottonsugar (棉花糖) 于 2009年09月23日18:25:30 星期三) 提到: fl=dirr('./'); nl=length(fl); for i=1:nl fname=fl(i).name; if strcmp(fname,'XXXX') str=['load ',fname]; eval(str); end end ☆──────────────────────────────────────☆ tearful (pingr) 于 2009年10月07日09:20:02 星期三) 提到: 多谢棉花糖老兄的回答,不过还是有点儿问题,我把程序改了一下后,最后的关键就在于 load那句了。str=['load(D:\data\',fl(i).name,'\',fname,')']; 因为load在用的时候是:load('D:\data\01001\ECG.txt');现在我无法加上那个括号里面 的一撇',所以总是无法把数据load上。 请问这个一撇怎么加上呢?谢谢啦。 我改了以后的程序如下: fl=dirr('D:\data'); nl=length(fl); nl2=length(fl(1).isdir); for i=1:nl for j=1:nl2 fname=fl(i).isdir(j).name; if strcmp(fname,'ECG.txt') str=['load(D:\data\',fl(i).name,'\',fname,')']; eval(str); end end end ☆──────────────────────────────────────☆ cottonsugar (棉花糖) 于 2009年10月10日07:34:40 星期六) 提到: 阿?还没有解决阿。 比如你想load一个文件 load('d:\ecg.txt'); 用string来表示就是str=['load(''d:\ecg.txt'');']; 然后再eval(str)即可