【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:结果
四、说明
以上的程序实现一和实现二其本质上是一样的,区别就是实现二是将代码封装了起来。