您的位置:首页 > 编程语言 > MATLAB

matlab中读取某个文件夹下所有数据文件

2011-07-29 17:04 507 查看
怎么用matlab读取多个数据文件?
1:如果文件名规则
% 文件目录:
my_dir=' /home/my_calculation1/test1/';
%文件名前缀
my_pre_T='test';
%文件数目
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中,也可以使用通配符的。下面就来展示下:
现在有一个文件夹里面有50个的.dat文件.每个文件大概三万行.两列,第一列是字符串,第二列是浮点数字.
批量读取这个文件夹里的.dat文件的第二列。读取完以后的数组变量名就是.dat的文件名
假定.dat文件在/home/my_calculation1/test1/ 文件夹下,文件名符合matlab变量名的命名规则,要读取第二列的浮点数字为数组并以文件名为变量名。
mydir='/home/my_calculation1/test1/';temp1=dir([mydir,'*.dat']);
 num_temp1=length(temp1);for i1=1:num_temp1filename=[mydir,temp1(i1).name];
temp=dlmread(filename,'',0,1);
eval([temp1(i1).name(1:end-4),'=temp;'])
dlmread,fopen等操作就不需详写了!与单个文件一样。
end
注意:如果直接使用 temp1=dir(mydir]);读取文件夹下所有文件,应当从第三个开始才是目录下的文件。另外,使用dir还可以遍历一个文件夹下的所有子文件夹。
 1、利用dir(外层文件夹)获取子文件夹;2、利用dir(子文件夹)获取子文件夹中的文件信息;3、遍历文件,做处理;
对于遍历文件夹,也可以使用mathworks网站上的函数dirr轻松搞定。
下面是饮水思源论坛上的做法。没有进行整理。敬请原谅。
论坛地址:http://bbs.sjtu.edu.cn/bbscon,board,MathTools,file,M.1255180893.A.html☆──────────────────────────────────────☆
     tearful (pingr) 于 2009年09月14日16:57:15 星期一)提到:现在有个文件夹data中的数据想要批量处理,而data中有多个子文件夹,名字分别为01001,01002,…,每个子文件夹中有多个数据,假设为ECG.txt,PCG.txt,…。现在我想要依次读取01001中的各数据进行处理,然后读取01002中的进行处理,依此类推,直到将data文件夹中的数据全都处理完。我知道在labview中可以把文件夹的名字弄成字符拼接后可以不断的循环读取,不知道在matlab中如何实现这样的功能?因为数据的仿真要在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:nlfname=fl(i).name;if strcmp(fname,'XXXX')str=['load ',fname];eval(str);endend☆──────────────────────────────────────☆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:nlfor j=1:nl2fname=fl(i).isdir(j).name;if strcmp(fname,'ECG.txt')str=['load(D:\data\',fl(i).name,'\',fname,')'];eval(str);endendend☆──────────────────────────────────────☆cottonsugar (棉花糖) 于 2009年10月10日07:34:40 星期六)提到:阿?还没有解决阿。比如你想load一个文件 load('d:\ecg.txt');用string来表示就是str=['load(''d:\ecg.txt'');'];然后再eval(str)即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: