[已解决] 批量读取某一类型文件(如txt)问题

[复制链接]
tinhong 发表于 2013-6-19 10:17:22
如果批量读取一个文件夹(为叙述方便起见,该文件夹命名为2012)内的txt类型文件,这些文件是储存在这个文件夹的子文件夹里,即2012文件夹里面包含了文件夹6、7(6、7表示6月、7月),6、7文件夹里面又有文件夹1到30(表示1到30天),文件夹1到30里面各包含一个文件夹dq,文件夹dq里面包含的才是txt文件(文件夹dq只包含一个txt文件),请问如何用M文件编程,批量读取这些txt文件。感觉好难啊!!!

最佳答案


stellari 发表于 2013-6-19 12:33:41
基本原则是,每遇到一层文件夹中有多个文件(夹),就需要用一层循环。所以在你的程序中:
1、由用户指定2012这个文件夹
2、用dir命令获取2012下面的所有文件夹,即6,7 (第一层循环)
3、对6和7分别用dir命令找出其下的所有的子文件夹,即1-30(第二层循环)
4、在第二层循环内部,把之前找到的各子文件夹名拼在一起,后面再加入dq,即得每一个txt文件所在路径K
5、用dir找到K下的txt文件名,读取之即可。

main = 'C:\...\2012\'
  sub1 = dir(main);
  sub1([~sub1.isdir]) = []; % remove all non-directory entries
  sub1 = sub1(3:end);       % remove . and ..
  for i = 1:length(sub1)
    sub2 = dir([main sub1(i).name]);
    % 以下两步同sub1
    for j = 1:length(sub2)
      thispath = [main '\' sub1(i) '\' sub2(j) '\dq\'];
      txtname = dir([thispath '*.txt']);
      fullname = [thispath txtname(1)];
     % fullname contains the fullpath to one txt file. Now you can use whatever function to read it
      READFILE(fullname);
  ...
...
回复此楼

5 条回复


stellari 发表于 2013-6-19 12:33:41
基本原则是,每遇到一层文件夹中有多个文件(夹),就需要用一层循环。所以在你的程序中:
1、由用户指定2012这个文件夹
2、用dir命令获取2012下面的所有文件夹,即6,7 (第一层循环)
3、对6和7分别用dir命令找出其下的所有的子文件夹,即1-30(第二层循环)
4、在第二层循环内部,把之前找到的各子文件夹名拼在一起,后面再加入dq,即得每一个txt文件所在路径K
5、用dir找到K下的txt文件名,读取之即可。

main = 'C:\...\2012\'
  sub1 = dir(main);
  sub1([~sub1.isdir]) = []; % remove all non-directory entries
  sub1 = sub1(3:end);       % remove . and ..
  for i = 1:length(sub1)
    sub2 = dir([main sub1(i).name]);
    % 以下两步同sub1
    for j = 1:length(sub2)
      thispath = [main '\' sub1(i) '\' sub2(j) '\dq\'];
      txtname = dir([thispath '*.txt']);
      fullname = [thispath txtname(1)];
     % fullname contains the fullpath to one txt file. Now you can use whatever function to read it
      READFILE(fullname);
  ...
...
回复此楼

tinhong 发表于 2013-6-28 15:00:03
stellari 发表于 2013-6-19 12:33
基本原则是,每遇到一层文件夹中有多个文件(夹),就需要用一层循环。所以在你的程序中:
1、由用户指定20 ...

高级啊,慢慢看先,谢谢啊

若水清池 发表于 2013-8-23 16:03:17
stellari 发表于 2013-6-19 12:33
基本原则是,每遇到一层文件夹中有多个文件(夹),就需要用一层循环。所以在你的程序中:
1、由用户指定20 ...

那如果在文件夹dq下有很多个txt文件,比如a1,a2,a3;b1,b2,b3;c1.。。。。。。而这些文件需要分前面为a。的txt放在一起处理,b。的txt文件放在一起处理。。。等等,那又当如何呢?想了好多天了,都没有找到好的方法,望指教~多谢啦!

jiangxuzhen 发表于 2013-8-27 23:20:48
若水清池 发表于 2013-8-23 16:03
那如果在文件夹dq下有很多个txt文件,比如a1,a2,a3;b1,b2,b3;c1.。。。。。。而这些文件需要分前面 ...

读出文件名后判断文件名

DUJIJING 发表于 2014-1-6 19:40:51
stellari 发表于 2013-6-19 12:33
基本原则是,每遇到一层文件夹中有多个文件(夹),就需要用一层循环。所以在你的程序中:
1、由用户指定20 ...

如果某个文件里有好几个TXT文本,需要读取其中几个的几个txt中的数据,但是有10列N行数据,只需要读取第七列的数据 。那该怎么办?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表