我试过编写一个代码:
%# 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。请注意,每个文本之间都有一个空行。
感谢任何帮助。
答案 0 :(得分:3)
文本文件是磁盘上的一组连续字节。如果更改文件中间任何文本段的长度,则需要重写文件的所有后续字节,然后截断或扩展文件。它们不会自动换档。这就像从内存中的数组结构插入或删除(在像C这样的低级语言中,不像Matlab那样自动调整数组大小),而不是链表。
直接使用该文件可能是错误的方法。在用较短的文本替换文本后,Matlab甚至不提供缩短文件所需的ftruncate()函数。只需将整个文件读入内存中的数组,然后在那里操作,然后使用fopen(...,'w')将整个文件写回来,替换原始文件。如果你正在进行面向行的更改,那么使用celltr数组的行代码可能会更容易,而不是使用嵌入行分隔符的一个大字符数组。
答案 1 :(得分:2)
尝试使用'r+'
打开文件。 'w'
只会创建一个新文件并删除旧文件中的所有内容(如果存在)。
f_id=fopen('fire.txt','r+');