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

怎么用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_temp1

filename=[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中有多个子文件夹,名字分别为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)即可



你可能感兴趣的:(windows,struct,list,matlab,character,filenames)