Matlab读取同一路径下多个txt或mat文件总结
来源:互联网 发布:如何在mac上切换中英文 编辑:程序博客网 时间:2024/05/15 12:51
在http://www.ilovematlab.cn/viewthread.php?tid=27723&page=1#pid229348这篇帖子里面,stonedan大哥从mat文件中读取数据后绘制图形,但是由于mat文件太多,每次都是用load,plot这种语句会很麻烦,想要使用循环的方式来一次读取所有的文件。我想能不能编写这么一个函数供以后调用呢?经过昨天一晚上的摸索,终于有所收获,写出来供大家分享一下。
一、读取同一路径下所有txt文件的程序:
(说明:该程序参考了http://bbs.ywsy.net/viewthread.php?tid=209737这篇文档,但是我试过了,作者给出的程序老是报错,有不完善的地方,比如说每个txt文档的数据不同长度时就不行,下面是我写的函数。)
- function data = readall_txt(path)
- % READALL_TXT 读取所有文件
- % DATA = READALL_TXT(PATH)读取路径PATH下的所有txt文件中的数据赋给data
- % txt文件中含有一个数据项
- % 输出cell格式以免各txt中数据长度不同
- %
- % 原始版本:V1.0 作者:李鹏 时间:2009.04.04
- A = dir(fullfile(path,'*.txt'));
- % 读取后A的格式为
- % name -- filename
- % date -- modification date
- % bytes -- number of bytes allocated to the file
- % isdir -- 1 if name is a directory and 0 if not
- A = struct2cell(A);
- num = size(A);
- for k =0:num(2)-1
- x(k+1) = A(4*k+1);% 找出name序列
- end
- for k = 1:num(2)
- newpath = strcat(path,'\',x(k));
- data{k} = load(char(newpath));
- end
- % [EOF] readall_txt.m
比如,我有三个txt文档,在路径E:\shuju下:
名字分别为123.txt,456.txt,789.txt
在MATLAB命令窗口输入:
data = readall_txt(‘E:\shuju’);
我们可以检验结果,分别输入data{1},data{2},data{3}
可以看到已经把所有的数据都读出了,并且,虽然里面的数据长度不同,也没有任何问题!
二、读取所有路径下所有mat文件的程序
这个程序弄了好长时间才出来的,呵呵,经过了很多实验,本想着应该和txt差不多,但是后来才发现,差距好大呢,我编写了两个版本,第一个是针对所有mat文件中只保存了一个变量的,第二个是针对所有mat文件中保存了多个变量的,我经过了数次实验了,结果证明是无误的,可能还会有其他不完善的地方,大家多多指教。
1.所有mat文件只有一个变量的程序
- function data = read_mat(path)
- % READ_MAT 读取所有文件
- % DATA = READ_MAT(PATH)读取路径PATH下的所有mat文件中的数据赋给data
- % 前提是每个MAT文件只含有一个变量,如果含有多个,则使用READ_MAT
- % 输出cell格式以免各mat中数据长度不同
- % 输出data后,如要使用请用格式data{index}访问各数据项
- %
- % 原始版本:V1.0 作者:李鹏 时间:2009.04.04
- % 修改版本:V1.1 修改内容:适应mat文件只有一个变量的情况 时间:2009.04.05
- %
- A = dir(fullfile(path,'*.mat'));
- % 读取后A的格式为
- % name -- filename
- % date -- modification date
- % bytes -- number of bytes allocated to the file
- % isdir -- 1 if name is a directory and 0 if not
- A = struct2cell(A);
- num = size(A);
- for k =0:num(2)-1
- x(k+1) = A(4*k+1);% 找出name序列,x存储内容为*.mat
- end
- for k = 1:num(2)
- newpath = strcat(path,'\',x(k));
- temp = load(char(newpath));
- matname = char(fieldnames(temp));% 获取结构成员名称
- data{k} = getfield(temp,matname);% 获取该名称下的成员内容
- end
- % [EOF] read_mat.m
假如我有两个mat文件在路径E:\shuju下,则输入:
data = read_mat('E:\shuju');
检验结果可以看出是正确的,但是我想下面用debug来显示一下其中变量的变化情况,自己感觉是比较复杂的,因为从结构体,cell等数据变来变去的,可能我的程序把原来简单的问题复杂化了,但是的确没有找到更好的办法。
- 命令窗口输入:
- >> dbstop in read_mat at 19
- >> dbstop in read_mat at 26
- >> dbstop in read_mat at 27
- >> dbstop in read_mat at 28
- 然后运行
- data = read_mat('E:\shuju');
- 我们发现程序在第19行(num = size(A);)停下了,在命令行输入A
- 显示
- A =
- 'a.mat'
- 'b.mat'
- [1x20 char]
- [1x20 char]
- [175]
- [176]
- [0]
- [0]
- 这就是这个路径下所有的mat文件的情况。
- 然后命令行输入:
- K>> dbcont
- 注意K>>是调试程序时窗口显示的符号,就像正常时显示>>一样
- 在第26行停止
- 命令行输入:
- K>> newpath
- 结果
- newpath =
- 'E:\shuju\a.mat'
- 这就是我们得到的第一个文件的全部路径
- 命令行输入:
- K>> dbcont
- 27行停止,
- 命令行输入:
- K>> temp
- 结果
- temp =
- a: [1 2 3 4 5]
- 这是一个结构体变量,我们要将里面的field名称和内容提取出来,就是下面两行程序的意思了。
- 命令行输入:
- K>> dbcont
- 28行停止,输入
- K>> matname
- 结果
- matname =
- a
- 这就是这个变量的名字了,然后就很容易找到变量的内容最后赋值给data单元数据。
- 输入:
- K>> dbcont
- 在下一个循环中的26行停止了
- 输入
- K>> data{1}
- 结果
- ans =
- 1
- 2
- 3
- 4
- 5
- 已经将第一个变量完全读取出来!
- 可以终止调试了
- 输入
- K>> dbquit
- 终止,注意要将所有断点清楚呀。
- 输入
- >> dbclear in read_mat
断点消失了。完成!
1.
所有mat文件有多个变量的程序
- function data = readall_mat(path)
- % READALL_MAT 读取所有文件
- % DATA = READALL_MAT(PATH)读取路径PATH下的所有mat文件中的数据赋给data
- % mat文件中含有多个数据项
- % 输出cell格式以免各数据项长度不同
- % 输出data后若要使用data中的内容请使用data{index}访问
- %
- % 原始版本:V1.0 作者:李鹏 时间:2009.04.04
- A = dir(fullfile(path,'*.mat'));
- % 读取后A的格式为
- % name -- filename
- % date -- modification date
- % bytes -- number of bytes allocated to the file
- % isdir -- 1 if name is a directory and 0 if not
- A = struct2cell(A);
- num = size(A);
- for k =0:num(2)-1
- x(k+1) = A(4*k+1);
- end
- m = 1;
- for k = 1:num(2)
- newpath = strcat(path,'\',x(k));
- temp = load(char(newpath));
- temp = struct2cell(temp);
- num2 = size(temp);
- for l = 1:num2(1)
- data{m} = temp{l};
- m = m+1;
- end
- end
- % [EOF] readall_mat.m
0 0
- Matlab读取同一路径下多个txt或mat文件总结
- 关于在MATLAB读取同一路径下多个txt或mat文件总结
- 对MATLAB读取同一路径下多个txt或mat文件方法探讨
- MATLAB中读取同一路径下所有txt或mat文件的程序
- MATLAB中如何读取同一路径下所有txt或mat文件小程序
- matlab读取txt到.mat
- matlab循环读取文件(xls、txt、dat、mat)】
- matlab批量读取同一目录下的txt文件
- Python 读取mat txt 文件
- Matlab 将一个矩阵保存在.mat文件中,或读取.mat文件
- MATLAB生成、读取mat文件
- matlab读取、显示.mat文件
- matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
- matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
- matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
- Matlab读取txt文本文件总结
- matlab 下 txt文件读取
- matlab 读取txt文件数据
- iOS Socket理论知识
- 实现Entity,Dao,Service,Controller,JSP代码生成神器
- POJ-2665
- iOS Socket编程-C语言版(UDP)
- CSS3伪类:valid、invalid、required
- Matlab读取同一路径下多个txt或mat文件总结
- iOS Socket编程-C语言版(TCP)
- ubuntu(虚拟机)中使用minicom
- android中webview用法总结
- 解放思想
- 11.缺陷跟踪系统Mantis的用户管理
- linux目录结构详细介绍 【转】
- C语言算法的基本特征
- 仿淘宝图片划过放大