完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
由于mat文件太多,每次都是用load,plot这种语句会很麻烦,想要使用循环的方式来一次读取所有的文件。我想能不能编写这么一个函数供以后调用呢?
一、 读取同一路径下所有txt文件的程序: function data = readall_txt(path) % READALL_TXT 读取所有文件 % DATA = READALL_TXT(PATH)读取路径PATH下的所有txt文件中的数据赋给data % txt文件中含有一个数据项 % 输出cell格式以免各txt中数据长度不同 % % 原始版本:V1.0 作者:*** 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:shujua.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
函数加数据加验证程序.rar
(24.09 KB, 下载次数: 67
)
数据和验证程序.rar
(14.1 KB, 下载次数: 22
)
work.rar
(10.03 KB, 下载次数: 30
)
|
|
相关推荐
|
|
一、
读取同一路径下所有txt文件的程序: function data = readall_txt(path) % READALL_TXT 读取所有文件 % DATA = READALL_TXT(PATH)读取路径PATH下的所有txt文件中的数据赋给data % txt文件中含有一个数据项 % 输出cell格式以免各txt中数据长度不同 % % 原始版本:V1.0 作者:*** 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:shujua.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 |
|
|
|
|
|
1577 浏览 1 评论
200圆!求助大佬给一份VSG并网和离网模式的simulink仿真
1859 浏览 0 评论
MATLAB(3)--矩阵的引用(sub2ind、ind2sub、reshape函数使用)
2676 浏览 0 评论
3016 浏览 0 评论
4095 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 03:49 , Processed in 0.494286 second(s), Total 52, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号