C语言读取TXT文档,要求:按行读取,然后按行分别输出到指定的TXT文件中
一个复习:
所遭遇的问题及情况需求:
- 从北京雷灾检测网站上获取到的2002年到2013年的北京地区的雷灾数据,一共629条,为了进行文本聚类,需要把一个txt文件中的629条数据分散到成629个txt文件,手动分类的话至少要耗费5个小时,为了节省时间,选择C语言对629条数据划分为629个txt文件,为以后的文本聚类作准备数据。
由于好久都没有看C语言了,相关的文件输入输出函数都忘记了,也算趁着这个机会复习一下相关知识。
所用到的主要函数:
- fopen
- feof
- fgets
- fputs
- fclsoe
为了实现输出文件名的自增操作,使用sprintf函数作为字符串格式化命令,中间确实是掉进了很多的坑,以博客形式把代码附上以此记录一下吧!
时间较为仓促,所以代码的相关优化及美化工作没有做!
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * ReadSpeacialLine(int i)
{
char filename[] = "C:/Users/zhangbin/Desktop/tet/test.txt"; //文件名
FILE *fp;
int WhichLine=i; //指定要读取哪一行
int CurrentIndex=0; //当前读取的行
static char StrLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp))
{
if (CurrentIndex==WhichLine)
{
fgets(StrLine,1024,fp); //读取一行
printf("%s", StrLine); //输出
return StrLine;
}
fgets(StrLine,1024,fp); //读取一行,并定位到下一行
CurrentIndex++;
//printf("%s", StrLine); //输出
}
fclose(fp); //关闭文件
return NULL;
}
int main()
{
FILE * fd;
char * sBuf ;//= (char *)malloc(1024);
char * fileName = "C:/Users/zhangbin/Desktop/tet/";
char sName[1024];
//int num = 1;
//sprintf(sName,"%s%d.txt",fileName,num);
//printf("%s",sName);
//输出位置
for(int i = 0; i < 629; i++)
{
int num = i + 1;
sBuf = ReadSpeacialLine(i);
printf("%s",sBuf);
sprintf(sName,"%s%d.txt",fileName,num); //字符串格式化输出
printf("%s",sName);
fd = fopen(sName,"w");
fputs(sBuf,fd);
fclose(fd);
}
// free(sBuf);
return 0;
}
原始数据:
按行提取后的效果如下:
每一个txt文件如下相似内容: