用matlab实现大文本文件指定字符串的查找与替换
1、需要读取修改源文件如下图

2、清空空间,输入文件路径,以及ID号,和厚度。
clc
clear
close all
filename='D:\thinkpad\Desktop\test.txt';
PartID=1;%要修改的ID号
newthickness=0.9;%输入修改厚度
3、由于文件中每个字符加上空格是10个字符,所以输入值必须保证10字符,才能与test.txt进行精确查找。也得判断PartID,newthickness是几位。
strPartID=num2str(PartID);
strnewtemp=num2str(newthickness);
LenstrPID=length(strPartID);
LenstrTID=length(strnewtemp);
for jk=1:10-LenstrPID
strPartID=[' ',strPartID];%添加空格,保证只占用10个字符
end
for jl=1:10-LenstrTID
strnewtemp=[' ',strnewtemp];%添加空格,保证只占用10个字符
end
LenstrPID=length(strPartID);
LenstrTID=length(strnewtemp);
4、查找替换主文件。主要使用fgetl,strfind,strcmp,fseek,已经fprintf写函数。用fprintf函数将strnew替换文件中的 ” 0.8 0.8 0.8 0.8 “ 。
程序如下:
if LenstrPID==10&&LenstrTID==10
strnew=[strnewtemp,strnewtemp,strnewtemp,strnewtemp];%生成要替换的厚度
[fid,errmsg]=fopen(filename,'r+');
if fid<0
disp(errmsg);
disp('不能打开文件');
else
flag=1;
while(~feof(fid))%|flag
tline=fgetl(fid);
if ischar(tline);
tline=upper(tline); if ~isempty(strfind(tline, '*SECTION_SHELL')); %字符串匹配
for k=1:2;%将光标移动到PartID行
tpart=fgetl(fid);
end
if strcmp(strPartID,tpart(1:10));%是否是指定PartID
fseek(fid,0,'cof'); %那么找到把光标移到这个字符串前
fprintf(fid,'%s',strnew); %
flag=0;
break;
end
end
end
end
end
fclose(fid);
if flag
disp('k文件中没有厚度或者指定PartID');
else
disp('修改完成');
end
else
disp('值占用空间不是10个字节,检查程序')
end
5、运行结束后,结果如下图:
