注册 登录
编程论坛 C语言论坛

如何有规律性的删除一个文本文件中具有规律的某一行。

hxwj 发布于 2019-11-21 15:22, 1968 次点击
如何有规律性的删除一个文本文件中具有规律的某一行。
比如,文档A有如何行:
Asdfgdfgh
Bgfhf12
Cfg
Djjk
E12
F
G23
H233
删除文档中只有3个字符的所有行
Asdfgdfgh
Bgfhf12
Djjk
F
H233

[此贴子已经被作者于2019-11-21 21:03编辑过]

4 回复
#2
rjsp2019-11-21 16:38
根据你上一个帖子 https://bbs.bccn.net/viewthread.php?tid=497921&page=1#pid2713318 简单改改就行了呀
若不肯举一反三,那作业的意义何在?

程序代码:
#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 );
}

#3
hxwj2019-11-21 21:04
回复 2楼 rjsp
可能我没有把问题说明白
#4
纯蓝之刃2019-11-21 22:18
程序代码:
#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");
}
#5
rjsp2019-11-21 23:43
以下是引用hxwj在2019-11-21 21:04:31的发言:

可能我没有把问题说明白

你这叫没说明白?你这是把题目要求全换了呀:)
1