63.当当网txt数据按行切割与合并
- 获取文件有多少行
- //获取文件有多少行
- 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");
- }
- void main()
完整代码:
- #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数据按行切割与合并的更多相关文章
- Python爬虫库Scrapy入门1--爬取当当网商品数据
1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy 注意这 ...
- scrapy获取当当网中数据
yield 1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代 2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yiel ...
- java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- 【转】java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)
1.网页解析 当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html 点击下方的链接,一次观察各个页面的ur ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- 转 当当网资深DBA:DB运维四大现代化的实现
位好,今天我的主题是 <DB运维的四个现代化> ,看标题就能明白,是关于DBA自动化运维平台的事情.http://dbaplus.cn/news-21-855-1.html 主要是分享下我 ...
- python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...
- Python 东方财富网-股市行情数据抓取
东方财富网 股市行情数据抓取: http://quote.eastmoney.com/center/gridlist.html#hs_a_board 请求数据未入库处理,其中数据只存入数据文本,未做存 ...
随机推荐
- iOS App 上架流程
iPhone App 上架流程 1. 申请 App ID (1) 连到 Devel ...
- C语言:具体解释指针
指针应该算得上是c语言的精华,但也是难点. 非常多教程或者博客都有对其具体的解说与分析. 我这一节的内容,也是解说指针.但我会尽量使用图解的方式,使大家非常easy理解及掌握. 一.基本使用 先来看看 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度
在默认情况下,EasyUI的DataGrid好像都没有具备自己主动宽度的适应功能,通常是指定像素宽度的.可是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预 ...
- vue23:vue-loader
vue-loader: 其他loader -> css-loader.url-loader.html-loader..... 后台: nodeJs(模块化) -> require expo ...
- zzulioj--1815--easy problem(暴力加技巧)
1815: easy problem Time Limit: 1 Sec Memory Limit: 128 MB Submit: 98 Solved: 48 SubmitStatusWeb Bo ...
- Sqoop1与Sqoop2的比较
1.sqoop1和sqoop2是两个不同的版本,它们是完全不兼容的. 2.版本划分方式:Apache 1.4.x 之后的版本属于sqoop1,1.99.x之上的版本属于sqoop2. 3.与sqoop ...
- “==”和Equals区别
相信很多朋友在面对,对象判等时经常会犹豫是用“==”还是Equals呢?有时候发现两者得到的结果相同,但有时候有不同, 究竟在什么情况下"==" 会相等,什么情况下Equals会不 ...
- 如何把本地的项目推送到github上面去
前题:本地已经建好了项目,但电脑上没有安装git (windows 系统) 1.首页从网上下载git 并安装. 2.进入项目所在的文件夹,右键鼠标 3.新建.gitignore文件 touch .g ...
- try{futureGirl}catch(Exception){"Kill All Trouble"}——echarts样式
首先先给未来女,解释一下题目吧.这是段代码,我再try{}括号里写了你,意思我会保护你.后面的catch(Exception)是捕捉你的所有麻烦,交给我解决. 今天收工较早,拖着疲惫是身躯回到宿舍,简 ...
- Linux下yum安装ffmpeg和使用
本文属于转载文章:转载地址是http://www.cnblogs.com/dennisit/archive/2012/12/27/2835089.html 使用Yum安装ffmpeg 打开 vi /e ...