文件夹A中有100个txt文件,按1-100.txt命名,另有一excel文件内含符合某种条件的txt文件名,例如20、30、55等,请问如何利用Matlab编写程序,将excel有名的txt文件另存到新文件夹B中?
(1)问题的matlab解决代码
%从Excel中获得需要拷贝的文本文件标号
obj_txt_file_ind=xlsread('txt_files_to_be_copied.xlsx');
%循环通过matlab的system函数执行命令行的复制操作
for i=1:numel(obj_txt_file_ind)
system(['copy .\A\',num2str(obj_txt_file_ind(i)),'.txt .\B\']);
end
(2)代码的运行结果
含100个文本文件的A文件夹的截图:
读取文件信息
fid = fopen(filename,'r+');
读取该文件的内容:
i = 0;
while ~feof(fid) % 这个循环的作用是从文件头读到底
tline = fgetl(fid); % 读取一行
i = i+1;
content = tline; % 把每一行的内容储存到"content"这个cell里
end
写入内容:
for i = 1:size(content,2)-1
fprintf(fid,'%s/n',content); % 一行一行写入内容
end
修改某一行特定的内容:
content{lineNumber} = strrep(content{lineNumber},'要替换的内容','要修改成的内容')
操作完成后关闭文件:
fclose(fid);
现在有两个txt文件,File1和File2,内容分别如下所示:
File1.txt:
2 这是第一行
44 这是第二行
5664 这是第三行
File2.txt:
0 这是第一行
1 这是第二行
0 这是第三行
44 这是第四行
现在要将文件1中第二行的44替换成1,3,5并生成3个新文件命名命名为File1_1, File1_2, File1_3。
将文件2中第3行的0替换成1,3,5并生成3个新文件命名命名为File2_1, File2_2, File2_3。
%% INITIALIZATION
clc
clear all
close all
%% INPUT
file = dir('*.txt'); % 获取当前文件夹下所有后缀为.txt的文件
L = [2 3]; % 需要修改的行
NewText = 1:2:5; % 要修改成的数据
%% READ FILE
for FN = 1:size(file,1) % 读取两个txt文件内容, FN代表FileNumber,文件序号
fid{FN} = fopen(file(FN).name,'r+');% 需要读取的文件, "fopen"打开文件
i = 0;
while ~feof(fid{FN}) % 这个循环的作用是从头读到底
tline = fgetl(fid{FN}); % 读取一行
i = i+1;
originaltline{FN,i} = tline; % 把每一行的内容储存到"originaltline"这个cell里
end
fclose(fid{FN}); % "fclose"关闭读取
end
newtline = originaltline; % 复制一遍几个文件的内容
%% MODIFY CONTENT AND SAVE TO A NEW FILE
for k = 1:size(NewText,2)
FN = 1; % 文件序号
newtline{FN,L(FN)} = strrep(originaltline{FN,L(FN)},'44',num2str(NewText(k))); % 将原文件第二行的44替换成NewText中对应的数据
newfid{FN,k} = fopen(sprintf('File1_%d.txt',k),'a'); % 打开一个新文件命名为"老文件名_数字.txt",如果没有这个文件则创建
for j = 1:size(newtline,2)-1 % 将更改后的内容再一行一行写进去
if ~isempty(newtline{FN,j}) % 判断某一行是否为空行,如果是,则跳过不写 (可用于两个文件长度不一时,删除某一个文件末尾无用空行)
fprintf(newfid{FN,k},'%s\n',newtline{FN,j}); % fprintf为写入内容
end
end
fclose(newfid{FN,k}); % 写入完成后关闭该文件
FN = FN + 1; % 文件序号
newtline{FN,L(FN)} = strrep(originaltline{FN,L(FN)},'0',num2str(NewText(k))); % 将原文件第三行的0替换成新生成的第一个文件的文件名
newfid{FN,k} = fopen(sprintf('File2_%d.txt',k),'a');
for j = 1:size(newtline,2)-1
if ~isempty(newtline{FN,j})
fprintf(newfid{FN,k},'%s\n',newtline{FN,j});
end
end
fclose(newfid{FN,k});
end
完毕,over.