【C语言】C语言读取文本文件

一 前言

        时不时牵扯到做处理文件,然后就要读取文本,每次都要重新写,这里就做一个记录,方便以后用到,就直接复制粘贴就ok。

二 按字符读取文本文件

1、程序实现一

        1:代码

/*
 程序功能:分别按照字符,行标识读取文本文件

 */

// 一、按照字符读取文本文件
#include <stdio.h>
int fileHang(FILE *fp);

int main(int argc, char *argv[])
{
    int flag;
    char ch;


    char *f1 = argv[1];         //  后台参数
    FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件

    if(fp1 == NULL){
        printf("文件 %s 打开时发生错误", f1);
        return -1;
    }

    while((ch=fgetc(fp1)) != EOF){
        // putchar(ch);
        printf("%c",ch);
    }
 
    // fileHang(fp1);
    fclose(fp1);
    return 0;
}

        2:结果
在这里插入图片描述

2、程序实现二

        1:代码

/*
 程序功能:分别按照字符,行标识读取文本文件

 */

// 一、按照字符读取文本文件
#include <stdio.h>
int fileHang(FILE *fp);

int main(int argc, char *argv[])
{
   
    char *f1 = argv[1];         //  后台参数
    FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件

    if (fp1 == NULL)
    {
        printf("文件 %s 打开时发生错误", f1);
        return -1;
    }

    fileHang(fp1); // 调用自定义函数
    fclose(fp1); // 关闭文件指针
    return 0;
}


// 创建子函数
int fileHang(FILE *fp1)
{

    int lines = 1;
    char ch;
    while ((ch = fgetc(fp1)) != EOF)// 读取到文件末尾或读取失败时返回 EOF
    { 
        
        if (ch == '\n')
        {
            lines++;
        }
        // putchar(ch);
        printf("%c", ch);
    }

    printf("\n 一共 %d 行",lines);
    return 1;
}

        2:结果
在这里插入图片描述

3、以西游记为海量文本进行测试

        1:代码

/*
 程序功能:分别按照字符,行标识读取文本文件

 */

// 一、按照字符读取文本文件

#include <stdio.h>
#include<time.h>

int fileHang(FILE *fp);

int main(int argc, char *argv[])
{
   clock_t start,finish;
   double duration;

    char *f1 = argv[1];         //  后台参数
    FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件
    start = clock();
    if (fp1 == NULL)
    {
        printf("文件 %s 打开时发生错误", f1);
        return -1;
    }

    fileHang(fp1); // 调用自定义函数
    fclose(fp1); // 关闭文件指针
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf("\n一共耗时 %f 秒",duration);
    return 0;
}


// 创建子函数
int fileHang(FILE *fp1)
{

    int lines = 1;
    char ch;
    while ((ch = fgetc(fp1)) != EOF)// 读取到文件末尾或读取失败时返回 EOF
    { 
        
        if (ch == '\n')
        {
            lines++;
        }
        // putchar(ch);
        printf("%c", ch);
    }

    printf("\n 一共 %d 行",lines);
    return 1;
}


        2:结果

在这里插入图片描述

三、按行读取文本文件

1、程序实现一

        1:代码

/*
 程序功能:分别按照字符,行标识读取文本文件

 */

// 二、按照行读取文本文件
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int fileHang(FILE *fp);

int main(int argc, char *argv[])
{
    char line[MAX];
    int lines = 0;
    char *f1 = argv[1];         //  后台参数
    FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件

    if (fp1 == NULL)
    {
        printf("文件 %s 打开时发生错误", f1);
        exit(1);
    }

    while(fgets(line,MAX,fp1) != NULL){
    // 或者,使用whie(!feof(fp1)){fgets(line,MAX,fp1)}
        lines++; // 统计行数
        printf(line);// 打印文本
        
    }
    
    // fileHang(fp1); // 调用自定义函数
    printf("\n一共 %d 行",lines);
    fclose(fp1); // 关闭文件指针
    return 0;
}

        2:结果
在这里插入图片描述

2、程序实现二

        1:程序

/*
 程序功能:分别按照字符,行标识读取文本文件

*/

// 二、按照行读取文本文件
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int fileHang(FILE *fp);

int main(int argc, char *argv[])
{
    char line[MAX];
    int lines = 0;
    char *f1 = argv[1];         //  后台参数
    FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件

    if (fp1 == NULL)
    {
        printf("文件 %s 打开时发生错误", f1);
        exit(1);
    }

    fileHang(fp1); // 调用自定义函数
    fclose(fp1);   // 关闭文件指针
    return 0;
}


// 创建子函数
int fileHang(FILE *fp1)
{

    int lines = 0;
    char line[MAX];
    while (fgets(line, MAX, fp1) != NULL)
    {
        lines++;      // 统计行数
        printf(line); // 打印文本
    }
    printf("\n 一共 %d 行", lines);
    return 1;
}

        2:结果
在这里插入图片描述

四、说明

        以上的程序实现一和实现二其本质上是一样的,区别就是实现二是将代码封装了起来。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐