MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   修改记事本文本 (https://www.labfans.com/bbs/showthread.php?t=26446)

poster 2019-12-14 20:13

修改记事本文本
 
我试图写一个代码,其中:

%# 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' [B]编辑:[/B]

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”指针被覆盖的第一行。现在, [B]问题1:[/B]如果新文本比现有文本短,则覆盖后现有文本中的字符仍然保留。有什么提示吗? [B]问题2:[/B] “ fseek”仅允许转到文件的开头,当前位置或结尾。有什么方法可以使指针随机移动,就像进入文本No4 / 5一样。注意,每个文本之间都有一个空白行。

[B]任何帮助表示赞赏。[/B]



[B]回答:[/B]

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

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



[url=https://stackoverflow.com/questions/5137258]更多&回答...[/url]


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

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