如何有规律性的删除一个文本文件中具有规律的某一行。
如何有规律性的删除一个文本文件中具有规律的某一行。比如,文档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"); }