Matlab如何删除txt文件中的一行?

比如一个txt的第5行和第6行是空行,我想用matlab编辑txt将其中的这两行删去。求教大神
关注者
14
被浏览
46,450

3 个回答

绝大部分情况下,你并不需要从文件中删除某行。你需要做的是对读取的数据进行判断,如果是空行,就舍弃,继续下一行。

fid = fopen('1.txt','w+t');
while ~feof(fid)
    data = fgetl(fid);
    if isempty(data)
        continue;
        % do something with the data
fclose(fid)

当然,如果你实在想要实现删除某些行,也不是不可以,毕竟记事本都能做到,MATLAB怎么会做不到呢?

首先,必须明确一点,同一个文件在硬盘上是连续存在的。每当你删除某一个字符时,意味着后面的字符必须往前挪一个字节,这样才能确保一个文件在硬盘上是连续的。当文件很大时,这是很笨的一种方式。那么记事本是怎么做到的呢?

很简单,读取文件的全部字符到内存中,对其进行编辑。编辑好后,将内存中的字符再写入到硬盘上(对应记事本的保存操作)。

fid = fopen('1.txt','rt+');
str = [];
while ~feof(fid)
    tmp = fgets(fid);
    if ~all(isspace(tmp))
        str = [str tmp];
frewind(fid);
fprintf(fid,str);
fclose(fid);

大致讲一下上述代码涉及的函数。

  • fopen : 打开文件,'rt+'表示以读写模式打开文本文件。
  • feof: 检测是否读到文件末尾。
  • fgets: 读取文件的一行,保留行尾的换行符。
  • fgetl: 读取文件的一行,不保留换行符。
  • isspace: 判断字符数组中哪些是不可打印的字符,包括空格、换行符等。
  • all: 逻辑数组是否全为1。
  • frewind: 将文件位置指示符移至文件的开头。
  • fprintf: 将字符数组写入到文本文件。
  • fclose: 关闭文件。