我试图写一个代码,其中:
%# 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数组可能会更容易。
更多&回答...