修改记事本文本

时间:2011-02-28 00:59:56

标签: matlab coding-style notepad

我试过编写一个代码:

  %# 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。请注意,每个文本之间都有一个空行。

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

直接使用该文件可能是错误的方法。在用较短的文本替换文本后,Matlab甚至不提供缩短文件所需的ftruncate()函数。只需将整个文件读入内存中的数组,然后在那里操作,然后使用fopen(...,'w')将整个文件写回来,替换原始文件。如果你正在进行面向行的更改,那么使用celltr数组的行代码可能会更容易,而不是使用嵌入行分隔符的一个大字符数组。

答案 1 :(得分:2)

尝试使用'r+'打开文件。 'w'只会创建一个新文件并删除旧文件中的所有内容(如果存在)。

f_id=fopen('fire.txt','r+');