C语言读取TXT文档,要求:按行读取,然后按行分别输出到指定的TXT文件中

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文件如下相似内容:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/104593812
今日推荐