问题描述:用正则表达先将几个文件夹内含有特殊名字的文件提取出来放到一个整合文件夹里,然后利用文件名中的16-23-1136这种日期来排序,先将其转化为数字然后按数字大小排序生成一个文件名列表。将整合文件夹的文件按排序后的文件名列表排序合并为一个文件完成整合。
%复制文件到整合文件夹
onefilepath = 'E:\office文件';
folderInfo = dir(onefilepath);
% 筛选出所有的子文件夹名称
subFolderList = {folderInfo([folderInfo(:).isdir]).name};
subFolderList(ismember(subFolderList,{'.','..'})) = []; % 去除'.'和'..'文件夹
csvonefilepath ='E:\office文件';
for i = 1:length(subFolderList)
twofilepath = fullfile(onefilepath, subFolderList{i});
disp(twofilepath);
files = dir(fullfile(twofilepath, '*'));
for j = 1:numel(files)
if ~files(j).isdir & regexp(files(j).name, '0\.5', 'once') & regexp(files(j).name, '600', 'once')
% 复制文件到新文件夹中
copyfile(fullfile(twofilepath, files(j).name), csvonefilepath);
end
end
end
%排序合并
% 获取文件列表
onefilepath= 'E:\office文件';
files = dir(onefilepath);
% 去除'.'和'..'文件
files = files(~ismember({files.name},{'.','..'}));
% 用正则表达式提取日期时间字符串
pattern = '\d{2}-\d{2}-\d{2}_\d{4}';
datetimes = regexp({files.name}, pattern, 'match');
% 将日期时间字符串转换为数字
datetimes_num = cellfun(@(x)datenum(x, 'yy-mm-dd_HHMM'), datetimes);
% 按数字大小排序
[~, idx] = sort(datetimes_num);
files = files(idx);
disp(files(1));
nFiles = length(files);
data = {};
header = '';
for i = 1:nFiles
% 打开文件并读取数据
fname = fullfile(onefilepath, files(i).name);
fid = fopen(fname);
C = textscan(fid, '%s', 'Delimiter', '\n', 'Whitespace', '');
fclose(fid);
C = C{1};
% 保留第一个文件的标题行
if i == 1
header = C{1};
data = [data; C(2:end)];
else
data = [data; C(2:end)];
end
end
% 将数据写入新文件
newfname = fullfile('E:\office文件', 'all-data2.csv');
fid = fopen(newfname, 'w');
fprintf(fid, '%s\n', header);
fprintf(fid, '%s\n', data{:});
fclose(fid);