我有一个包含字符串和数字组合的文本文件。例如如下:
* 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搜索来自另一个文本文件的文本文件,跳过特殊行,我知道它的编号没有太大成功!
任何建议都将不胜感激。
答案 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