用matlab实现大文本文件指定字符串的查找与替换
实现替换时,有两种情况,一是原来的那行完全不要,另一种是换掉那行的一部分数据。
替换之后输出的主要办法有两个:第一种方法是采用覆盖的办法(适用于数据量特别大,全部读进来内存不够用的情况),第二种方法是把所有数据读取出来然后写成新的文件(数据量小的时候特别方便)
在matlab中文论坛,大家常用的方法都是第二种方法,即先用fopen全部读入,修改完成后,再写到一个新文件。对于大文件,(大于1m以上的文件,或者上g的文件),读整个文件,再写整个文件,比较慢,费时。
本经验主要介绍第一种方法的使用。
例如:对于下文的字符,要求对指定字符*section_shell下面的指定数字id(加粗的1)的下一行厚度进行整行修改(修改加粗的数字0.8)。文件名为test.txt
$hwcolor comp11 3
geban6
11 8 5
*section_shell
$hmname prop1tube1.5.0
1 2 0.8333 5 0.0
0.8 0.8 0.8 0.8
*section_shell
$hmname prop3gaban1
3 2 0.8333 5 0.0
0.4 0.4 0.4 0.4
工具/原料
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:运行结束后,结果如下图:

注意事项
本文使用matlar2010b调试完成,不保证其他版本能完美运行
本文使用的系统是windows,如果是linux系统,请对应修改路径等其他事项
如果帮到你,请点赞,欢迎讨论。
希望本文【matlab 字符串替换】用matlab实现大文本文件指定字符串的查找与替换能帮到你。