Matlab读取多个文件夹下的同名csv文件

fori=1:12filename='D:\Due\Jump\2014?\600005.csv';delimiter=',';formatSpec='%*s%f%*s%*... for i=1:12
filename = 'D:\Due\Jump\2014?\600005.csv';
delimiter = ',';
formatSpec = '%*s%f%*s%*s%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'ReturnOnError', false);
fclose(fileID);
2014?600005 = dataArray{:, 1};
% Clear temporary variables
clearvars filename delimiter formatSpec fileID dataArray ans;
end
其中?表示文件夹名是201401-201412,希望读取之后保存成相应格式的mat文件,真心求助。
非常感谢您的帮助,还有几个问题

1.其实有两次循环,也就是文件路径是2014 》201401(一直到201412这样12个文件夹) 》20140102(这个月的工作日,大概20天),所以有两次循环,不知道是不是一样的道理?但是第二次循环已经不规则了。
2. 用csvread总是会出问题,请问csv这个能用xlaread吗?

3. 读取的多个文件后的数组的变量名能一样吗?还是要每个都不一样,当然,mat文件名需要按照顺序命名,也就是按日期+600005这样,这个怎么写?

4.需要把mat文件保存在当前m文件所在文件夹,如何实现?
展开
 我来答
tianxiawulang
推荐于2016-05-27 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2639万
展开全部

涉及到以下三个问题:

1、用循环对多个文件夹中的文件进行操作。这其实就是生成一个路径名的问题,可用类似下面的代码来做:

for i=1:12
    filename = ['D:\Due\Jump\2014' sprintf('%02i',i) '\600005.csv']; 
    ...
end

 

2、读csv文件。题主现在读csv文件应该没问题吧?如果用textscan遇到问题,不妨试试xlsread

 

3、保存成mat文件。这个更简单,用save函数即可,不过,还有两个细节需要明确:

(1)mat文件保存在什么位置?当前文件夹,还是和原csv文件相同?

(2)保存到mat文件中的变量名?mat文件不仅保存数据的内容本身,还包括变量的名称。

追问
补充了问题,非常感谢!
追答

就你补充的问题谈点建议,供参考:

 

1、关于双重循环的第二重循环不规则的问题,可以考虑以下两种方法:

(1)用dir函数获取一个文件夹里面的文件和子文件夹,然后对其结果进行循环,判断结构体的isdir域为真则进行处理(注意排除两个特殊的文件夹,即...)。这种方法适用于没有其它无关文件夹的情况。

(2)用循环j=1:31,对每个jexist函数判断是否存在相应的文件夹,有则处理,无则跳过。

 

2、xlsread函数可用于读csv文件,而且对一些复杂的csv文件来说,效果应该比textscan要好。

 

3、变量名可以一样。

mat文件名需要按照顺序命名,在循环体内直接生成字符串即可,例如:

fname = sprintf('2014%02i%02i+600005.mat',i,j);


4、要把mat文件保存在当前m文件所在文件夹,这要考虑两种情况:

(1)如果MATLAB的当前目录即为m文件所在文件夹,直接save(fname,varname)即可。

(2)如果m文件是通过添加path方式执行,其所在文件夹未必是当前路径,这种情况就稍微复杂一下,需要用mfilenamewhich配合来获取m文件所在的位置,然后把该路径附加到文件名前面。

 

由于没有测试条件,只能根据自己的经验大致提这么一些建议。如果还有问题再追问吧,或者把部分文件(含目录结构)打包传到网盘,我再帮你写代码。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式