[已答复] MATLAB编辑txt文本文件,插入字符串长度大于原字符串长度

[复制链接]
LGGGGGGG 发表于 2022-3-15 15:37:53
本帖最后由 LGGGGGGG 于 2022-3-15 15:43 编辑

这篇帖子主要想请教一下MATLAB对txt字符串编辑的问题
原代码

paraname1 = '123456789';       %变量名,输入为字符串格式

fileID=fopen('D:\Matlab 2020a\bin\test1.txt','r+');%%打开.atp文件
replaceline=4;                 %%找到修正行
for k=1:(replaceline-1)
  fgetl(fileID);
end
fseek(fileID,0,'cof');          %%将指针放到修正行
fprintf(fileID,'%s',paraname1);   %%写入修正后的数据
fclose(fileID);                 %%关闭文件读写状态


原数据(为方便观察随便选的)

123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678


当使用fprintf函数对一个txt中某一行字符串进行修改时,分为以下三种情况
1)新字符串长度小于原字符串格式


此时  paraname1 = '12345678';       %变量名,输入为字符串格式

比原数据少1位,运行结果为:
123456789
234567891
345678912
123456783
567891234
678912345
789123456
891234567
912345678

可见第四行前8个数据确实替换掉了,但是原来的数据没有删掉,我的解决方案是修改输入格式,固定输入9字符,左对齐(或者右对齐),缺位采用空格填补;

2)新字符串长度等于原字符串格式

此时  paraname1 = '123456789';       %变量名,输入为字符串格式
这种情况最简单,直接运行效果就很好
234567891
345678912
123456789
567891234
678912345
789123456
891234567
912345678


3)新字符串长度大于原字符串格式
此时此时  paraname1 = '123456789a';       %变量名,输入为字符串格式
如果依然采用上面的代码输入,首先输出结果是正常的:
123456789
234567891
345678912
123456789a
567891234
678912345
789123456
891234567
912345678


但是 paraname1 = '123456789ab'时,即再多一位,按上面的代码运行,输出结果为:
123456789
234567891
345678912
123456789ab567891234
678912345
789123456
891234567
912345678


这时我意识到可能是换行符的问题,需要在格式上加换行符,所以输入修改为:
fprintf(fileID,'%s\r\n',paraname1);   %%写入修正后的数据
结果为
123456789
234567891
345678912
123456789ab
7891234
678912345
789123456
891234567
912345678

可见目标行确实达到目标了,但是后续行被前面挤掉了两个字符,且多出来多少个就会在下一行挤掉多少个,这就是我想提问的地方,求解决办法!
附要求:只在这一个文本内进行操作


1 条回复


MaggiGunner 发表于 2022-11-23 18:08:09
你好,我也遇到这个问题,刚发了个帖子求助。请问后来有解决方法了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表