Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 修改记事本文本

我试图写一个代码,其中:

%# Matlab reads a notepad file. f_id=fopen('n1.txt','r'); reports=textscan(f_id, '%s', 'Delimiter', '\n') fclose(f_id) reports_saved=reports{1} ; P='blah blah' 编辑:

goes to a specific line of the text file. X=ftell(f_id) Ai=fseek(f_id, 0, 'cof') fprintf(f_id,'%s', P); fclose(f_id) “ cof”指针被覆盖的第一行。现在, 问题1:如果新文本比现有文本短,则覆盖后现有文本中的字符仍然保留。有什么提示吗? 问题2: “ fseek”仅允许转到文件的开头,当前位置或结尾。有什么方法可以使指针随机移动,就像进入文本No4 / 5一样。注意,每个文本之间都有一个空白行。

任何帮助表示赞赏。



回答:

文本文件是磁盘上的一组连续字节。如果更改文件中间任何文本段的长度,则需要重写文件的所有后续字节,然后截断或扩展文件。他们不会自动移动。这就像在内存中的数组结构中插入或删除(使用像C这样的较低级语言,不会像Matlab那样自动调整数组的大小),而不是链接列表。

直接使用文件可能是错误的方法。 Matlab甚至不提供ftruncate()函数,在用较短的文本替换文本后,您需要缩短文件的长度。只需将整个文件读入内存中的数组,在其中进行操作,然后用fopen(...,'w')将整个文件写回,替换原始文件。如果您要进行面向行的更改,那么使用cellstr行数组而不是一个带有嵌入式行定界符的大型char数组可能会更容易。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:22


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.