大数据处理初探
来源:互联网 发布:JS在区间内取随机数 编辑:程序博客网 时间:2024/05/22 04:57
要对一个有几百万行的txt检索出其中的一行:
思路:先计算出具体有多少行,每一行可以看作是一个char *的指针,例如我的renrenwang.txt 有1367866行,那就定义一个char **pp他是一个二级指针,也可以看作是一个指针数组pp[i]表示其中的一行.因为每一行的长度不一样,如果按照最长的一个对其的话,就有可能浪费了许多内存,可以用 fgets(str,275,pf),读取一行放入缓冲区str中,然后strlen求出一行的大小,动态分配此大小的内存空间,再把指向这个内存空间的指针赋值给pp[i],就实现了用一个二级指针管理很多个动态分配的内存.原理如图,图中文件的行数假设为100.
#define _CRT_SECURE_NO_WARNINGS //关闭安全检查#include<stdio.h>#include<stdlib.h>#include<string.h>char **pp=NULL;//存储指针数组的地址void initdatatomem(char *path){ pp= (char **)malloc(sizeof(char *)* 1367866); FILE *pf = fopen(path, "r"); if (pf == NULL) { printf("fail"); } else { for (int i = 0; i < 1367866; i++)//关键代码 { char str[275] = {0}; fgets(str, 275, pf);//依次读取 int strlength = strlen(str) + 1;//获取要分配的字符串长度 char *px = (char *)malloc(sizeof(char *)*strlength);//分配内存 strcpy(px, str); px[strlength - 1] = '\0';//设定最后一个字符为'\0' pp[i] = px; } } printf("载入内存ok\n");}void *findstr(char *searchstr){ for (int i = 0; i < 1367866; i++) { char *ptemp = strstr(pp[i], searchstr);//遍历指针数组 字符串查找 if (ptemp != NULL) { printf("\n%s", pp[i]);//打印 } }}int getfilesize(char *path){ FILE *pf; pf = fopen(path, "r");//读取方式打开 if (pf == NULL) { return -1;//表示打开失败 } else { fseek(pf, 0, SEEK_END);//把文件指针移动到文件末尾 int num = ftell(pf);//获取文件指针开始到当前位置有多少个字节 fclose(pf); return num; }}int getn(char *path){ FILE *pf; pf = fopen(path, "r");//读取方式打开 if (pf == NULL) { return -1;//表示打开失败 } else { int i = 0; while (!feof(pf))//判断是否到了文件末尾 { char str[275]; fgets(str, 275, pf);//读取一行 i++;//获取有多少行 } fclose(pf); return i; }}void main(){ char *path = "C:\\Users\\Administrator\\Desktop\\大数据\\人人网500W数据库泄露\\renrenwang.txt"; int num = getfilesize(path); printf("%d字节,%fK,%fM", num, num/1024.0, num/1024.0/1024.0); printf("\n有%d行", getn(path));//1367866 initdatatomem(path); char searchstr[100]; scanf("%s", searchstr); findstr(searchstr); system("pause");}
0 0
- 大数据处理初探
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 大数据处理
- 经典的报数问题
- 非参数估计-parzen窗估计和k近邻估计
- Java NIO系列教程(十) Java NIO DatagramChannel
- 把握linux内核设计思想系列
- 做微商还有很长微商卖什么孙佺推广的路要走,还有很多技巧要学习
- 大数据处理初探
- ios学习资料:
- Python 初学(3)
- 二叉树 小球下落问题
- Gerrit代码审核服务器搭建
- libevent源码分析-event
- 继承和重写(8.17)
- 用word模板作为add-in,制作一些快捷操作
- ListView性能优化