FILE構造を使用してテキストファイルを操作する

再び悩む、また微笑むことを忘れないでください;再び心配する、また調子に注意を払うべきです;再び苦い、また主張することを忘れないでください;再び疲れて、またあなた自身を愛したいです。
わざわざ、微笑むことを忘れないでください;そして緊急、トーンにも注意してください。どんなに頑張っても、頑張ることを忘れないでください。どんなに疲れていても、自分自身を愛さなければなりません。

ファイルを上手に学ぶことは、C言語の向上に非常に役立つと言わざるを得ません。C言語を上手にプレイしたい場合は、ファイルを削除する必要があります。もちろん、以前の基礎も築く必要があり、ファイルに関連する機能がたくさんあるので、わざと覚える必要はありませんが、それらの使い方を知っておく必要があります。

タスクの説明
このレベルでは、関数ext \ fractDigitを作成する必要があります。この関数は、現在のディレクトリにある既存のファイルa.txtから値を読み取って解析し、その結果を現在のディレクトリにあるファイルb.txtに書き込みます。
その中には、ファイルa.txtにさまざまな文字が含まれていますが、有効なのは数字のみです。数字を抽出し、各3桁を整数に構成して、ファイルb.txtに書き込みます。各整数の間に1つ使用します。スペースで区切ります。読み取りプロセス中に、最後のa.txtに残っている文字が3桁未満の場合、残りの1桁または2桁の文字が1つの整数に結合されます。

例:a.txtのコンテンツは1j3j5sd0msd454ss3msd563であり、抽出されてファイルb.txtに書き込まれるコンテンツは135 45 435 63である必要があります(2番目の整数は3つの数値045で構成されているため、45です)。

プログラミング要件
プログラミングタスクは、step1 /fileTxt.cファイルのext \ fractDigit関数を完了して、FILE構造を使用してテキストファイルを操作するという要件を達成することです。具体的な要件は次のとおりです。
このレベルでは、現在のディレクトリにある既存のファイルa.txtから値を読み取って解析し、結果をに書き込むために、step1 /fileTxt.cファイルのext \ fractDigit関数を完了する必要があります。現在のディレクトリにあるファイルb.txtの要件。

入力:q12h44h67k854ksd923823sf83wd38457sd433ds、
出力:124467854 923
823833845743 3入力:1212121212343434343445454545450000005656565665dfsd455
出力:121212121234343434344545454545 0 0 565656566545 5

入力0は変更される可能性があることに注意してください。たとえば、045は45,000になり、1つの0のみが出力されます。

ソースコード:

#include <stdio.h>
#include <stdlib.h>
//声明外部函数,函数extractDigit在其它源文件中实现
extern void extractDigit();

int main()
{
    
    
    //准备文件a.txt的内容
    FILE *fp = fopen("a.txt","w");  //打开文件a.txt用于写
    char s[1000];
    fgets(s, 999, stdin);  //从键盘读取一行字符
    fputs(s,fp);  //将这一行字符写入文件a.txt中
    fclose(fp);   //关闭fp关联的文件a.txt
    extractDigit();  //调用函数,抽取数字写入文件b.txt中
    FILE *f = fopen("b.txt","r");  //以读的方式打开文件b.txt
    if(f==NULL)  //打开失败则返回
        return 0;
    int n,k=0;
    fscanf(f,"%d",&n);  //从文件b.txt中读出一个整数到变量n中
    while(!feof(f))  //如果文件没结束(读出的不是EOF)
    {
    
    
        k++;
        printf("%d ",n);  //输出该整数到屏幕
        if(k%10==0)   //每十组一换行
            printf("\n");
        fscanf(f,"%d",&n);  //读取下一个整数
    }
    if(k%10!=10)  //最后一行没有换行符则补上
        printf("\n");
    return 0;
}
// 函数extractDigit的功能:从文件a.txt中提取数值写入文件b.txt中
void extractDigit()
{
    
    
    FILE *fi = fopen("a.txt","r");  // 以读的方式打开文件a.txt
    FILE *fo = fopen("b.txt","w");  // 以写的方式打开文件b.txt
    if(fi==NULL || fo==NULL)  // 如果某个文件打开失败,则返回
        return;
    char readADigit(FILE *fi)// 从文件读取一个字符
{
    
    
        char c = fgetc(fi);
        if(c==EOF)
        {
    
    
            return EOF;
        }
        while(c>'9' || c<'0')// 如果不是数字字符,则继续读取下一个字符
        {
    
    
            c = fgetc(fi);
            if(c==EOF)
            {
    
    
                return EOF;
            }
        }
        return c;
    }
    char c;
    int num=0,k=0;
    c = readADigit(fi);// 从文件读取一个字符
    while(c!=EOF)
    {
    
    
        num=num*10+c-'0';// 计算数字字符构成的整数
        k++;
        if(k==3)
        {
    
    
            fprintf(fo,"%d ",num);
            k=0;
            num=0;
        }
        c = readADigit(fi);
    }
    if(k!=0)// 如果有不到三位的数值,则写入文件b.txt
    {
    
    
        fprintf(fo,"%d ",num);
    }
    fclose(fi);  // 关闭文件fi
    fclose(fo);  // 关闭文件fo
}

運用結果:
ここに写真の説明を挿入
最後の言葉:質問をブラッシングして独自の欠点を見つけてから、専門分野に進みます。

おすすめ

転載: blog.csdn.net/m0_46259251/article/details/106210636