• 获取文件有多少行

     //获取文件有多少行
    int getN(char *path)
    {
    FILE *pf = fopen(path, "r");
    if (pf==NULL)
    {
    return -;
    }
    else
    {
    int i = ;
    while (!feof(pf))
    {
    char str[] = { };
    fgets(str, , pf);
    i++;
    }
    fclose(pf);
    return i;
    }
    }
  • 宏定义行数
     //数据的行数
    #define N 13180820
  • 文件按行切割
     //文件切割
    void space(char *path, int num)
    {
    char ** pathes = malloc(sizeof(char*)*num);
    for (int i = ; i < num;i++)
    {
    pathes[i] = malloc(sizeof(char) * );
    //格式化处理文件名
    sprintf(pathes[i], "dangdangwang%d.txt", i + );
    } //打开文件
    FILE *pf = fopen(path, "r"); if (pf == NULL)
    {
    return -;
    }
    else
    {
    //如果能被整除
    if (N%num == )
    {
    for (int i = ; i < num;i++)
    {
    //写入文件
    FILE *pfw = fopen(pathes[i], "w");
    for (int j = ; j < N / num; j++)
    {
    char str[] = { };
    //读取一行写入一行
    fgets(str, , pf);
    fputs(str, pfw);
    }
    fclose(pfw);
    }
    }
    else
    {
    for (int i = ; i < num - ; i++)
    {
    //写入文件
    FILE *pfw = fopen(pathes[i], "w");
    //处理前面n-1个
    for (int j = ; j < N / (num-); j++)
    {
    char str[] = { };
    //读取一行写入一行
    fgets(str, , pf);
    fputs(str, pfw);
    }
    fclose(pfw); } {
    //处理剩下的
    //写入
    FILE *pfw = fopen(pathes[num-], "w");
    for (int j = ; j < N %(num-); j++)
    {
    char str[] = { };
    //读取一行写入一行
    fgets(str, , pf);
    fputs(str, pfw);
    }
    fclose(pfw);
    }
    }
    fclose(pf);
    }
    }
  • 文件合并
     //合并文件
    void merge(char *newpath,int n)
    {
    char ** pathes = malloc(sizeof(char*)*n);
    for (int i = ; i < n; i++)
    {
    pathes[i] = malloc(sizeof(char) * );
    sprintf(pathes[i], "dangdangwang%d.txt", i + );
    } //写入文件
    FILE *pf = fopen(newpath, "w");
    if (pf == NULL)
    {
    return -;
    }
    else
    {
    //依次读取每个文件
    for (int i = ; i < n;i++)
    {
    FILE *pfr = fopen(pathes[i], "r"); while (!feof(pfr))
    {
    char str[] = { };
    //读取一行写入一行
    fgets(str, , pfr);
    fputs(str, pf);
    }
    fclose(pfr);
    }
    fclose(pf);
    }
    }
  • 测试函数
     void main()
    {
    //int num = getN(path);
    //printf("%d", num);获取行数
    int num;
    scanf("%d", &num); //分割
    space(path, num);
    //合并
    merge(newpath, num); system("pause");
    }

完整代码:

 #define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char *path = "dangdangwang.txt";
char *newpath = "dangdangwangN.txt"; //数据的行数
#define N 13180820 //获取文件有多少行
int getN(char *path)
{
FILE *pf = fopen(path, "r");
if (pf==NULL)
{
return -;
}
else
{
int i = ;
while (!feof(pf))
{
char str[] = { };
fgets(str, , pf);
i++;
}
fclose(pf);
return i;
}
} //文件切割
void space(char *path, int num)
{
char ** pathes = malloc(sizeof(char*)*num);
for (int i = ; i < num;i++)
{
pathes[i] = malloc(sizeof(char) * );
//格式化处理文件名
sprintf(pathes[i], "dangdangwang%d.txt", i + );
} //打开文件
FILE *pf = fopen(path, "r"); if (pf == NULL)
{
return -;
}
else
{
//如果能被整除
if (N%num == )
{
for (int i = ; i < num;i++)
{
//写入文件
FILE *pfw = fopen(pathes[i], "w");
for (int j = ; j < N / num; j++)
{
char str[] = { };
//读取一行写入一行
fgets(str, , pf);
fputs(str, pfw);
}
fclose(pfw);
}
}
else
{
for (int i = ; i < num - ; i++)
{
//写入文件
FILE *pfw = fopen(pathes[i], "w");
//处理前面n-1个
for (int j = ; j < N / (num-); j++)
{
char str[] = { };
//读取一行写入一行
fgets(str, , pf);
fputs(str, pfw);
}
fclose(pfw); } {
//处理剩下的
//写入
FILE *pfw = fopen(pathes[num-], "w");
for (int j = ; j < N %(num-); j++)
{
char str[] = { };
//读取一行写入一行
fgets(str, , pf);
fputs(str, pfw);
}
fclose(pfw);
}
}
fclose(pf);
}
} //合并文件
void merge(char *newpath,int n)
{
char ** pathes = malloc(sizeof(char*)*n);
for (int i = ; i < n; i++)
{
pathes[i] = malloc(sizeof(char) * );
sprintf(pathes[i], "dangdangwang%d.txt", i + );
} //写入文件
FILE *pf = fopen(newpath, "w");
if (pf == NULL)
{
return -;
}
else
{
//依次读取每个文件
for (int i = ; i < n;i++)
{
FILE *pfr = fopen(pathes[i], "r"); while (!feof(pfr))
{
char str[] = { };
//读取一行写入一行
fgets(str, , pfr);
fputs(str, pf);
}
fclose(pfr);
}
fclose(pf);
}
} void main()
{
//int num = getN(path);
//printf("%d", num);获取行数
int num;
scanf("%d", &num); //分割
space(path, num);
//合并
merge(newpath, num); system("pause");
}

63.当当网txt数据按行切割与合并的更多相关文章

  1. Python爬虫库Scrapy入门1--爬取当当网商品数据

    1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy  注意这 ...

  2. scrapy获取当当网中数据

    yield 1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代 2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yiel ...

  3. java爬虫,爬取当当网数据

     背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...

  4. 【转】java爬虫,爬取当当网数据

     背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...

  5. scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)

    1.网页解析 当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html 点击下方的链接,一次观察各个页面的ur ...

  6. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...

  7. 转 当当网资深DBA:DB运维四大现代化的实现

    位好,今天我的主题是 <DB运维的四个现代化> ,看标题就能明白,是关于DBA自动化运维平台的事情.http://dbaplus.cn/news-21-855-1.html 主要是分享下我 ...

  8. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

    来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...

  9. Python 东方财富网-股市行情数据抓取

    东方财富网 股市行情数据抓取: http://quote.eastmoney.com/center/gridlist.html#hs_a_board 请求数据未入库处理,其中数据只存入数据文本,未做存 ...

随机推荐

  1. centos的终端字体杂乱的问题

    sudo yum -y install dejavu-sans-* dejavu-serif-fonts 下载字体一下就好了

  2. 炜煌E30 E31微型热敏打印机 STM32 串口驱动

    设置为汉字模式 十六进制 命令:1C    26 USART_SendData(USART2,0x1C); while(USART_GetFlagStatus(USART2,USART_FLAG_TC ...

  3. 【v2.x OGE教程 17】事务处理

    游戏代码中常常有些逻辑须要处理.因此OGE引擎加入了一个IUpdateHandler的类. IUpdateHandler类是OGE引擎中使用频率很之高的组件之中的一个,其本身是一个接口.内部有onUp ...

  4. Activity的launchMode和任务栈小结

    对Activity的launchMode的理解一直没有好好总结下,这两天系统总结下launchMode的使用方法: Activity的launchMode属性决定了Activity和应用程序当前任务栈 ...

  5. vue4 属性 class style

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Cordic 算法入门

    三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值.这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常是通过从已知值(比如sin(π/2)= ...

  7. BZOJ3158: 千钧一发

    [传送门:BZOJ3158] 简要题意: 给出n个机器,每个机器有a[i]基础值和b[i]价值 选出一部分机器使得这些机器里面两两至少满足以下两种条件之一: 1.a[i]2+a[j]2!=T2(T为正 ...

  8. SpringBoot结合MongoDB入门

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  9. Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置

    Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置 一.基本设置 首先,为了可以使我们的c++ 可以找到 iostream类,std标准库,我们需要在C/C++ General- ...

  10. XFCE 桌面环境美化,fedora27系统

    一.添加RPM Fusion源,安装方法这里就不说了以前的文章里写过. 二.安装XFCE 主题管理器 xfce-theme-manager [root@Fedora ~]# dnf install x ...