MATLAB中的文本文件操作

时间:2016-05-22 07:13:15

标签: matlab

我有一个包含字符串和数字组合的文本文件。例如如下:

* Preprint,echo = NO,model = NO,history = NO,contact = NO

*元素,类型= S4R

1,1,9,189,84

2,9,10,190,189

3,10,11,191,190

4,11,12,192,191

* Surface,type = ELEMENT,name = Surf-1

我想删除>> 2,9,10,190,189 我的意思是我想要在新文件中关注:

* Preprint,echo = NO,model = NO,history = NO,contact = NO

*元素,类型= S4R

1,1,9,189,84

3,10,11,191,190

4,11,12,192,191

* Surface,type = ELEMENT,name = Surf-1

我应该注意到这些数据已被更改,我唯一知道的就是它的数字,例如第4行。

我已多次使用google搜索来自另一个文本文件的文本文件,跳过特殊行,我知道它的编号没有太大成功!

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

fgets功能允许您逐行读取ASCII文件。当您遇到要跳过的行时(知道它所说的数字),只需使用continue语句跳过迭代:

clc;
close all;
clear all;

input = fopen('input.txt','r');
output = fopen('output.txt','w');
line = fgets(input);
fprintf(output,'%s',line);
cpt=0;
offset = 3;

while ischar(line)
    cpt=cpt+1;
    if (cpt==offset) 
        line = fgets(input);
        continue;
    end
    line = fgets(input);
    fprintf(output,'%s',line);
end

fclose(input);
fclose(output);

第一个fgets允许您将输入文件中的第一行复制到内存中。

以下fprintf将其写入您的输出文件。

接下来,您定义一个初始化为零的计数器,您还可以定义偏移量,即您想要跳过的行减去1,因为您已经读过第一行。

然后使用WHILE循环,在其中使用fgets函数从输入文件中读取每一行,并将其直接写入输出文件。当你到达文件的末尾时,fgets返回-1,这不是一个字符,所以循环结束。

你注意到cpt是迭代的,如果它等于偏移量,那么你必须跳过这一行,所以你读它但你没有写它,continue语句允许你跳转到循环的下一次迭代,跳过剩余的指令。

如果您想摆脱换行符,可以使用fgetl代替fgets

输入文件:

  

* Preprint,echo = NO,model = NO,history = NO,contact = NO

     

*元素,类型= S4R

     

1,1,9,189,84

     

2,9,10,190,189

     

3,10,11,191,190

     

4,11,12,192,191

     

* Surface,type = ELEMENT,name = Surf-1

输出文件:

  

* Preprint,echo = NO,model = NO,history = NO,contact = NO

     

*元素,类型= S4R

     

1,1,9,189,84

     

3,10,11,191,190

     

4,11,12,192,191

     

* Surface,type = ELEMENT,name = Surf-1