如何有规律性的删除一个文本文件中具有规律的某一行。
如何有规律性的删除一个文本文件中具有规律的某一行。比如,文档A有如何行:
Asdfgdfgh
Bgfhf12
Cfg
Djjk
E12
F
G23
H233
删除文档中只有3个字符的所有行
Asdfgdfgh
Bgfhf12
Djjk
F
H233
[此贴子已经被作者于2019-11-21 21:03编辑过]
程序代码:#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool insert_line_to( FILE* src, FILE* dst )
{
for( bool bwrote=false; ; )
{
char buf[1024+1]; // 行缓冲,确保其不小于2
char* p = fgets( buf, sizeof buf, src );
if( !p )
{
if( bwrote )
{
if( dst )
fputc( '\n', dst );
return true;
}
return false;
}
if( dst )
fputs( buf, dst );
bwrote = true;
if( buf[strlen(buf)-1] == '\n' )
return true;
}
}
int main( void )
{
FILE* fa = fopen( "a.txt", "r" );
FILE* fb = fopen( "b.txt", "w" );
for( size_t i=0; ; ++i )
{
bool bok = insert_line_to( fa, (i+3)%4==0 ? NULL : fb );
if( !bok )
break;
}
fclose( fb );
fclose( fa );
}
程序代码:#include <stdio.h>
#include <string.h>
int main(void)
{
int n,i=0,j=0;
char ch[100];
FILE* fa=fopen("a.txt","r");
FILE* fb=fopen("b.txt","w");
printf("请输入需要删除的含有n个字符的行:");
scanf("%d",&n);
do
{
do
{
for(i=0;i<n;i++)
{
ch[i]=fgetc(fa);
if(ch[i]=='\n'||ch[i]==EOF)
{
for(j=0;j<=i;j++)
fprintf(fb,"%c",ch[j]);
if(ch[i]=='\n')
{
i=-1;
continue;
}
else
break;
}
}
ch[n]=fgetc(fa);
}while(ch[n]=='\n');
for(j=0;j<=i;j++)
fprintf(fb,"%c",ch[j]);
while(1)
{
ch[0]=fgetc(fa);
if(ch[0]!='\n'&&ch[0]!=EOF)
fprintf(fb,"%c",ch[0]);
else
break;
}
if(ch[0]=='\n')
fprintf(fb,"%c",ch[0]);
}while(ch[0]!=EOF);
fclose(fb);
fclose(fa);
remove("a.txt");
rename("b.txt","a.txt");
}
