C语言按行读取文本文件
C语言按行读取文本文件一般来说,计算机文件可以分为两类:文本文件和二进制文件。文本文件是一种由若干行字符构成的计算机文件。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束标志来指明文件的结束。文本文件具有可读性,一般我们用的txt文件,log文件都是文本文件,其由字符构成,故我们就按字符处理,按行读取(linux下由’\n’字符换行,wondows下由’\r’’\n’组合
C语言按行读取文本文件
一般来说,计算机文件可以分为两类: 文本文件和二进制文件。
文本文件是一种由若干行字符构成的计算机文件。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束标志来指明文件的结束。
文本文件具有可读性,一般我们用的txt文件,log文件都是文本文件,其由字符构成,故我们就按字符处理,按行读取(linux下由’\n’字符换行,wondows下由’\r’’\n’组合一起换行)。
C标准库函数
函数声明
FILE *fopen(const char *path, const char *mode);
char *fgets(char *s, int size, FILE *stream);
int feof(FILE *stream);
int fclose(FILE *stream);
fopen(): 使用给定的模式 mode 打开 path 所指向的文件,成功返回FILE指针。
fgets(): 从指定的流 stream 读取一行,并把它存储在 s 所指向的字符串内。当读取 (size-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止。读到文件末尾或者出错时,返回NULL。
feof():测试给定流 stream 的文件结束标识符。到达文件尾时返回EOF
fclose():关闭流 stream。刷新所有的缓冲区。
使用fopen打开文件,使用fgets循环读取每行文件,使用feof判断是否读完文件,使用fclose关闭文件。
下面提供一个示例,仅供参考:
实现了读取输出除空行外的每一行数据,返回文本的总行数
#include <stdio.h>
#include <string.h>
// 每行最大长度
#define LINE_MAX 1024
/**
*@para path 输入文件路径
*@return 文件行数
*/
int read_line(char *path)
{
FILE *fp;
int line_num = 0; // 文件行数
int line_len = 0; // 文件每行的长度
char buf[LINE_MAX] = {0}; // 行数据缓存
fp = fopen(path, "r");
if (NULL == fp) {
printf("open %s failed.\n", path);
return -1;
}
while(fgets(buf, LINE_MAX, fp)) {
line_num++;
line_len = strlen(buf);
// 排除换行符
if ('\n' == buf[line_len - 1]) {
buf[line_len - 1] = '\0';
line_len--;
if (0 == line_len) {
//空行
continue;
}
}
// windos文本排除回车符
if ('\r' == buf[line_len - 1]) {
buf[line_len - 1] = '\0';
line_len--;
if (0 == line_len) {
//空行
continue;
}
}
printf("%s\n", buf);
/** 对每行数据(buf)进行处理 **/
}
if (0 == feof) {
// 未读到文件末尾
printf("fgets error\n");
return -1;
}
fclose(fp);
return line_num;
}
int main(int argc, char *argv[])
{
int line_num = read_line(argv[1]);
printf("line_num = %d\n", line_num);
return 0;
}
测试:
ubuntu1604,linux环境下运行
mao@ubuntu:~$ cat a.txt
aaaa
bbbb
cccc
mao@ubuntu:~$ cat b.txt
1234
34153
1111122
3
mao@ubuntu:~$ ./a.out a.txt
aaaa
bbbb
cccc
line_num = 3
mao@ubuntu:~$ ./a.out b.txt
1234
34153
1111122
3
line_num = 5
mao@ubuntu:~$
更多推荐
所有评论(0)