如何利用Matlab根据excel信息将指定指定文件名的txt文件另存到新的文件夹里?

文件夹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文件夹的截图:

img


含有待拷贝文本文件标号的Excel截图:

img


运行程序后的B文件夹截图:

img

读取文件信息
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.