• 获取文件有多少行

    1. //获取文件有多少行
    2. int getN(char *path)
    3. {
    4. FILE *pf = fopen(path, "r");
    5. if (pf==NULL)
    6. {
    7. return -;
    8. }
    9. else
    10. {
    11. int i = ;
    12. while (!feof(pf))
    13. {
    14. char str[] = { };
    15. fgets(str, , pf);
    16. i++;
    17. }
    18. fclose(pf);
    19. return i;
    20. }
    21. }
  • 宏定义行数
    1. //数据的行数
    2. #define N 13180820
  • 文件按行切割
    1. //文件切割
    2. void space(char *path, int num)
    3. {
    4. char ** pathes = malloc(sizeof(char*)*num);
    5. for (int i = ; i < num;i++)
    6. {
    7. pathes[i] = malloc(sizeof(char) * );
    8. //格式化处理文件名
    9. sprintf(pathes[i], "dangdangwang%d.txt", i + );
    10. }
    11.  
    12. //打开文件
    13. FILE *pf = fopen(path, "r");
    14.  
    15. if (pf == NULL)
    16. {
    17. return -;
    18. }
    19. else
    20. {
    21. //如果能被整除
    22. if (N%num == )
    23. {
    24. for (int i = ; i < num;i++)
    25. {
    26. //写入文件
    27. FILE *pfw = fopen(pathes[i], "w");
    28. for (int j = ; j < N / num; j++)
    29. {
    30. char str[] = { };
    31. //读取一行写入一行
    32. fgets(str, , pf);
    33. fputs(str, pfw);
    34. }
    35. fclose(pfw);
    36. }
    37. }
    38. else
    39. {
    40. for (int i = ; i < num - ; i++)
    41. {
    42. //写入文件
    43. FILE *pfw = fopen(pathes[i], "w");
    44. //处理前面n-1个
    45. for (int j = ; j < N / (num-); j++)
    46. {
    47. char str[] = { };
    48. //读取一行写入一行
    49. fgets(str, , pf);
    50. fputs(str, pfw);
    51. }
    52. fclose(pfw);
    53.  
    54. }
    55.  
    56. {
    57. //处理剩下的
    58. //写入
    59. FILE *pfw = fopen(pathes[num-], "w");
    60. for (int j = ; j < N %(num-); j++)
    61. {
    62. char str[] = { };
    63. //读取一行写入一行
    64. fgets(str, , pf);
    65. fputs(str, pfw);
    66. }
    67. fclose(pfw);
    68. }
    69. }
    70. fclose(pf);
    71. }
    72. }
  • 文件合并
    1. //合并文件
    2. void merge(char *newpath,int n)
    3. {
    4. char ** pathes = malloc(sizeof(char*)*n);
    5. for (int i = ; i < n; i++)
    6. {
    7. pathes[i] = malloc(sizeof(char) * );
    8. sprintf(pathes[i], "dangdangwang%d.txt", i + );
    9. }
    10.  
    11. //写入文件
    12. FILE *pf = fopen(newpath, "w");
    13. if (pf == NULL)
    14. {
    15. return -;
    16. }
    17. else
    18. {
    19. //依次读取每个文件
    20. for (int i = ; i < n;i++)
    21. {
    22. FILE *pfr = fopen(pathes[i], "r");
    23.  
    24. while (!feof(pfr))
    25. {
    26. char str[] = { };
    27. //读取一行写入一行
    28. fgets(str, , pfr);
    29. fputs(str, pf);
    30. }
    31. fclose(pfr);
    32. }
    33. fclose(pf);
    34. }
    35. }
  • 测试函数
    1. void main()
    2. {
    3. //int num = getN(path);
    4. //printf("%d", num);获取行数
    5. int num;
    6. scanf("%d", &num);
    7.  
    8. //分割
    9. space(path, num);
    10. //合并
    11. merge(newpath, num);
    12.  
    13. system("pause");
    14. }

完整代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. char *path = "dangdangwang.txt";
  5. char *newpath = "dangdangwangN.txt";
  6.  
  7. //数据的行数
  8. #define N 13180820
  9.  
  10. //获取文件有多少行
  11. int getN(char *path)
  12. {
  13. FILE *pf = fopen(path, "r");
  14. if (pf==NULL)
  15. {
  16. return -;
  17. }
  18. else
  19. {
  20. int i = ;
  21. while (!feof(pf))
  22. {
  23. char str[] = { };
  24. fgets(str, , pf);
  25. i++;
  26. }
  27. fclose(pf);
  28. return i;
  29. }
  30. }
  31.  
  32. //文件切割
  33. void space(char *path, int num)
  34. {
  35. char ** pathes = malloc(sizeof(char*)*num);
  36. for (int i = ; i < num;i++)
  37. {
  38. pathes[i] = malloc(sizeof(char) * );
  39. //格式化处理文件名
  40. sprintf(pathes[i], "dangdangwang%d.txt", i + );
  41. }
  42.  
  43. //打开文件
  44. FILE *pf = fopen(path, "r");
  45.  
  46. if (pf == NULL)
  47. {
  48. return -;
  49. }
  50. else
  51. {
  52. //如果能被整除
  53. if (N%num == )
  54. {
  55. for (int i = ; i < num;i++)
  56. {
  57. //写入文件
  58. FILE *pfw = fopen(pathes[i], "w");
  59. for (int j = ; j < N / num; j++)
  60. {
  61. char str[] = { };
  62. //读取一行写入一行
  63. fgets(str, , pf);
  64. fputs(str, pfw);
  65. }
  66. fclose(pfw);
  67. }
  68. }
  69. else
  70. {
  71. for (int i = ; i < num - ; i++)
  72. {
  73. //写入文件
  74. FILE *pfw = fopen(pathes[i], "w");
  75. //处理前面n-1个
  76. for (int j = ; j < N / (num-); j++)
  77. {
  78. char str[] = { };
  79. //读取一行写入一行
  80. fgets(str, , pf);
  81. fputs(str, pfw);
  82. }
  83. fclose(pfw);
  84.  
  85. }
  86.  
  87. {
  88. //处理剩下的
  89. //写入
  90. FILE *pfw = fopen(pathes[num-], "w");
  91. for (int j = ; j < N %(num-); j++)
  92. {
  93. char str[] = { };
  94. //读取一行写入一行
  95. fgets(str, , pf);
  96. fputs(str, pfw);
  97. }
  98. fclose(pfw);
  99. }
  100. }
  101. fclose(pf);
  102. }
  103. }
  104.  
  105. //合并文件
  106. void merge(char *newpath,int n)
  107. {
  108. char ** pathes = malloc(sizeof(char*)*n);
  109. for (int i = ; i < n; i++)
  110. {
  111. pathes[i] = malloc(sizeof(char) * );
  112. sprintf(pathes[i], "dangdangwang%d.txt", i + );
  113. }
  114.  
  115. //写入文件
  116. FILE *pf = fopen(newpath, "w");
  117. if (pf == NULL)
  118. {
  119. return -;
  120. }
  121. else
  122. {
  123. //依次读取每个文件
  124. for (int i = ; i < n;i++)
  125. {
  126. FILE *pfr = fopen(pathes[i], "r");
  127.  
  128. while (!feof(pfr))
  129. {
  130. char str[] = { };
  131. //读取一行写入一行
  132. fgets(str, , pfr);
  133. fputs(str, pf);
  134. }
  135. fclose(pfr);
  136. }
  137. fclose(pf);
  138. }
  139. }
  140.  
  141. void main()
  142. {
  143. //int num = getN(path);
  144. //printf("%d", num);获取行数
  145. int num;
  146. scanf("%d", &num);
  147.  
  148. //分割
  149. space(path, num);
  150. //合并
  151. merge(newpath, num);
  152.  
  153. system("pause");
  154. }

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. iOS App 上架流程

                                                             iPhone App 上架流程 1.  申请 App ID (1)  连到 Devel ...

  2. C语言:具体解释指针

    指针应该算得上是c语言的精华,但也是难点. 非常多教程或者博客都有对其具体的解说与分析. 我这一节的内容,也是解说指针.但我会尽量使用图解的方式,使大家非常easy理解及掌握. 一.基本使用 先来看看 ...

  3. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度

    在默认情况下,EasyUI的DataGrid好像都没有具备自己主动宽度的适应功能,通常是指定像素宽度的.可是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预 ...

  4. vue23:vue-loader

    vue-loader: 其他loader -> css-loader.url-loader.html-loader..... 后台: nodeJs(模块化) -> require expo ...

  5. zzulioj--1815--easy problem(暴力加技巧)

    1815: easy problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 98  Solved: 48 SubmitStatusWeb Bo ...

  6. Sqoop1与Sqoop2的比较

    1.sqoop1和sqoop2是两个不同的版本,它们是完全不兼容的. 2.版本划分方式:Apache 1.4.x 之后的版本属于sqoop1,1.99.x之上的版本属于sqoop2. 3.与sqoop ...

  7. “==”和Equals区别

    相信很多朋友在面对,对象判等时经常会犹豫是用“==”还是Equals呢?有时候发现两者得到的结果相同,但有时候有不同, 究竟在什么情况下"==" 会相等,什么情况下Equals会不 ...

  8. 如何把本地的项目推送到github上面去

    前题:本地已经建好了项目,但电脑上没有安装git  (windows 系统) 1.首页从网上下载git 并安装. 2.进入项目所在的文件夹,右键鼠标 3.新建.gitignore文件 touch .g ...

  9. try{futureGirl}catch(Exception){"Kill All Trouble"}——echarts样式

    首先先给未来女,解释一下题目吧.这是段代码,我再try{}括号里写了你,意思我会保护你.后面的catch(Exception)是捕捉你的所有麻烦,交给我解决. 今天收工较早,拖着疲惫是身躯回到宿舍,简 ...

  10. Linux下yum安装ffmpeg和使用

    本文属于转载文章:转载地址是http://www.cnblogs.com/dennisit/archive/2012/12/27/2835089.html 使用Yum安装ffmpeg 打开 vi /e ...