60.大数据创建索引,并实现大文件的二分查找,迁移实现分层

  • index.h

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #define N 10000000
     5
     6 struct index
     7 {
     8     int *pindex;
     9     int length;
    10 };
    11
    12 char **g_pp;//保存指针数组
    13 char filepath[256];
    14 char sortpath[256];
    15 char indexpath[256];
    16 struct index allindex;//索引
    17
    18 int getN();//函数声明
    19 void eatg(char *str);
    20 void eatN(char *str);
  • index.c

     1 #include"index.h"
     2
     3 char **g_pp = NULL;//保存指针数组
     4 char filepath[256] = { 0 };
     5 char sortpath[256] = { 0 };
     6 char indexpath[256] = { 0 };
     7 struct index allindex = { 0 };//索引
     8
     9 int getN()
    10 {
    11     FILE *pf = fopen("file.txt", "r");
    12     if (pf == NULL)
    13     {
    14         return -1;
    15     }
    16     else
    17     {
    18         int i = 0;
    19         while (!feof(pf))
    20         {
    21             char str[50] = { 0 };
    22             fgets(str, 50, pf);//读取
    23             i++;
    24         }
    25         fclose(pf);
    26         return i;
    27
    28     }
    29 }
    30 void eatg(char *str)
    31 {
    32     while (*str != ‘\0‘)
    33     {
    34
    35         if (*str == ‘-‘)
    36         {
    37             *str = ‘\0‘;
    38         }
    39         str++;
    40     }
    41
    42 }
    43 void eatN(char *str)
    44 {
    45     while (*str != ‘\0‘)
    46     {
    47         if (*str == ‘\r‘ || *str == ‘\n‘)
    48         {
    49             *str = ‘\0‘;
    50         }
    51
    52         str++;
    53     }
    54
    55 }
  • createsort.h

    1 #include "index.h"
    2
    3 void initmem();
    4 int com(void *p1, void*p2);
    5 void sort();
    6 void show();
    7 void writetofile();
  • createsort.cp

     1 #include "createsort.h"
     2 void initmem()
     3 {
     4     g_pp = calloc(N, sizeof(char*));//分配指针数组
     5     FILE *pf = fopen(filepath, "r");
     6     if (pf == NULL)
     7     {
     8         return -1;
     9     }
    10     else
    11     {
    12         for (int i = 0; i < N; i++)
    13         {
    14             char str[50] = { 0 };
    15             fgets(str, 50, pf);//读取
    16             g_pp[i] = calloc(strlen(str) + 1, sizeof(char));//分配
    17             if (g_pp[i]!=NULL)
    18             {
    19                 //sprintf(g_pp[i], str);//打印进去
    20                 strcpy(g_pp[i], str);
    21                 eatN(g_pp[i]);
    22             }
    23
    24             //printf("%s", g_pp[i]);//显示测试
    25
    26
    27         }
    28
    29
    30         fclose(pf);
    31
    32
    33     }
    34
    35
    36
    37
    38
    39
    40 }
    41
    42 int com(void *p1, void*p2)
    43 {
    44     char **pp1 = p1;
    45     char **pp2 = p2;
    46
    47     return strcmp(*pp1, *pp2);
    48
    49 }
    50
    51 void sort()
    52 {
    53     qsort(g_pp, N, sizeof(char*), com);
    54
    55
    56 }
    57 void show()
    58 {
    59     printf("\n此时状态\n");
    60     for (int i = 0; i < N; i++)
    61     {
    62         printf("\n%s", g_pp[i]);
    63     }
    64 }
    65 void writetofile()
    66 {
    67     FILE *pf = fopen(sortpath, "w");
    68     for (int i = 0; i < N; i++)
    69     {
    70         char temp[100] = { 0 };
    71     //    printf("\n%s", g_pp[i]);
    72         sprintf(temp, "%s\n", g_pp[i]);
    73     //    printf("\n%s", temp);
    74         fputs(temp, pf);
    75     }
    76
    77     fclose(pf);
    78 }
  • createindex.h

    1 #include "index.h"
    2 void init();
    3 void qucik();
  • createindex.c

     1 #include "createindex.h"
     2
     3
     4 void init()
     5 {
     6     printf("\n索引数组开始分配");
     7     allindex.length = N;
     8     allindex.pindex = calloc(N, sizeof(int));//分配内存
     9     printf("\n索引数组完成分配");
    10
    11     printf("\n开始读取");
    12     FILE *pf = fopen(sortpath, "rb");//\r\n->\n
    13     if (pf == NULL)
    14     {
    15         return -1;
    16     }
    17     else
    18     {
    19         int alllength = 0;
    20         for (int i = 0; i < N; i++)
    21         {
    22             char str[50] = { 0 };
    23             fgets(str, 50, pf);
    24             allindex.pindex[i] = alllength;//错位从0开始
    25
    26             int length = strlen(str);
    27             alllength += length;
    28
    29         }
    30
    31         fclose(pf);
    32     }
    33     printf("\n结束读取");
    34
    35     printf("\n开始写入");
    36     FILE *pfw = fopen(indexpath, "wb");//写入索引
    37     fwrite(allindex.pindex, sizeof(int), allindex.length, pfw);
    38     fclose(pfw);//关闭
    39     printf("\n结束写入");
    40
    41
    42     free(allindex.pindex);
    43
    44 }
    45 void qucik()
    46 {
    47     printf("\n索引数组开始分配");
    48     allindex.length = N;
    49     allindex.pindex = calloc(N, sizeof(int));//分配内存
    50     printf("\n索引数组完成分配");
    51
    52     printf("\n开始读取");
    53     FILE *pfw = fopen("index.txt", "rb");//写入索引
    54     fread(allindex.pindex, sizeof(int), allindex.length, pfw);
    55     fclose(pfw);//关闭
    56     printf("\n结束读取");
    57 }
  • binsearch.h

    1 #include "index.h"
    2 void binsearch(char *searchstr);
  • binsearch.c

     1 #include "binsearch.h"
     2
     3 void binsearch(char *searchstr)
     4 {
     5     int tou = 0;
     6     int wei = N - 1;
     7     int flag = 0;
     8     while (tou <= wei)
     9     {
    10         int zhong = (tou + wei) / 2;
    11         char zhongstr[256] = { 0 };
    12         {
    13             FILE *pf1 = fopen(indexpath, "rb");
    14             FILE *pf2 = fopen(sortpath, "rb");
    15
    16
    17             int indexnum = 0;
    18             fseek(pf1, zhong*sizeof(int), SEEK_SET);
    19             fread(&indexnum, sizeof(int), 1, pf1);//读索引zhong到indexnum
    20
    21             fseek(pf2, indexnum, SEEK_SET);
    22             fgets(zhongstr, 128, pf2);//读取
    23
    24             fclose(pf1);
    25             fclose(pf2);
    26         }
    27         eatN(zhongstr);
    28         char pnewzhongstr[256] = { 0 };
    29         sprintf(pnewzhongstr, zhongstr);
    30         eatg(pnewzhongstr);//遇到-终止
    31         int res = strcmp(pnewzhongstr, searchstr);//1 0  -1
    32
    33
    34         if (res == 0)
    35         {
    36             flag = 1;
    37             printf("%s", zhongstr);
    38             break;
    39         }
    40         else if (res == 1)
    41         {
    42             wei = zhong - 1;
    43         }
    44         else
    45         {
    46             tou = zhong + 1;
    47         }
    48
    49
    50     }
    51
    52
    53     if (flag)
    54     {
    55         printf("\nfind");
    56     }
    57     else
    58     {
    59         printf("\n not find");
    60     }
    61
    62
    63 }
  • main.c

     1 #include "binsearch.h"
     2 void initall()
     3 {
     4     strcpy(filepath, "1E~001OK.txt");
     5     strcpy(sortpath, "1E~001sort.txt");
     6     strcpy(indexpath, "1E~001index.txt");
     7
     8 }
     9
    10 void main()
    11 {
    12     initall();
    13     //初始化内存
    14     initmem();
    15     //排序
    16     sort();
    17     //写入文件
    18     writetofile();
    19
    20     //初始化索引
    21     init();
    22
    23     //二分查找
    24     while (1)
    25     {
    26         char str[256] = { 0 };
    27         scanf("%s", str);
    28         binsearch(str);
    29     }
    30     system("pause");
    31
    32 }

原文地址:https://www.cnblogs.com/xiaochi/p/8437174.html

时间: 2024-10-05 16:43:03

60.大数据创建索引,并实现大文件的二分查找,迁移实现分层的相关文章

七牛大数据平台的演进与大数据分析实践--转

原文地址:http://www.infoq.com/cn/articles/qiniu-big-data-platform-evolution-and-analysis?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 七牛大数据平台的演进与大数据分析实践 (点击放大图像) 图 1 大数据生态体系 看着图 1 大家可能会感到熟悉,又或者会

大数据技术原理与应用——大数据处理架构Hadoop

Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构. Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中. Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce. Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力. Hadoop的特性 Hadoop是一个能够对大量数据进

【揭秘】大数据程序员这9大行业上班最赚钱!

总是听说大数据就业前景最好,那么大数据学完后到底做啥呢,应该把自己放在哪个位置最合适. 在大数据成为趋势,成为国家战略的今天,如何最大限度发挥大数据的价值成为人们思考的问题.无论是对于互联网企业.电信运营商还是数量众多的初创企业而言,大数据的变现显得尤为重要.谁最先一步找到密码,谁就能够抢占市场,赢得发展.大数据变现,这里有9种商业模式,大数据程序员可以来看看自己更适合哪些行业? 前几年,国内大数据产业讨论较多.落地较少,商业模式处于初探期,行业处于两种极端: 一种是过热的浮躁带来了一定的泡沫和

大数据究竟是什么?大数据有哪些技术呢?

大数据究竟是什么?大数据有哪些技术呢?科多大数据来带你看看大数据的发展趋势是什么.今天的数据不是大,真正有意思的是数据变得在线了,这个恰恰是互联网的特点.""非互联网时期的产品,功能一定是它的价值,今天互联网的产品,数据一定是它的价值.""你千万不要想着拿数据去改进一个业务,这不是大数据.你一定是去做了一件以前做不了的事情."有人把数据比喻为蕴藏能量的煤矿.煤炭按照性质有焦煤.无烟煤.肥煤.贫煤等分类,而露天煤矿.深山煤矿的挖掘成本又不一样.与此类似,大数

大数据实时处理-基于Spark的大数据实时处理及应用技术培训

随着互联网.移动互联网和物联网的发展,我们已经切实地迎来了一个大数据 的时代.大数据是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合,对大数据的分析已经成为一个非常重要且紧迫的需求.目前对大数据的分析工具,首选的是Hadoop/Yarn平台,但目前对大数据的实时分析工具,业界公认最佳为Spark.Spark是基于内存计算的大数据并行计算框架,Spark目前是Apache软件基金会旗下,顶级的开源项目,Spark提出的DAG作为MapReduce的替代方案,兼容HDFS.H

透过现象看本质 大数据核心并不在规模大

透过现象看本质 大数据核心并不在规模大谆籽做谞谞诅资祝仔渍庄昨赚缀阻透过现象看本质 大数据核心并不在规模大 http://www.songtaste.com/user/10226369/info http://www.songtaste.com/user/10226373/info http://www.songtaste.com/user/10226374/info http://www.songtaste.com/user/10226382/info http://www.songtaste

人民日报海外版:大数据如何开启中国的&quot;大未来&quot;

原标题:"大数据"如何开启中国的"大未来" 8月31日,百度 The Big Talk 第三期活动<大数据开启大未来>在北京举行.MIT人类动力实验室主任.可穿戴设备先驱阿莱克斯·彭特兰作了有关"可穿戴设备和大数据收集"的一系列演讲,向到场观众展示了"大数据改变人类生活"的种种可能性,并与中国专家进行了交流与讨论. 彭特兰教授认为,输入数据的设备才是大数据应用的关键."只有在有了这些数据之后,我们才能够对

蔡先生论道大数据之三 , 国内互联网公司的大数据应用

上章,我简单描述了国外IT巨头在大数据方面的应用和战略,本章我们来看一下国内互联网公司如何理解大数据的. 随着互联网各类网络应用的不断深入,中国的大数据技术与应用的快速发展已成为不容忽视的事实.目前国内各IT企业,特别是大型互联网企业,都开始对大数据的存储.处理和应用进行战略布局. 国内BAT公司:) 百度 百度作为中国最大的搜索引擎,在中国和中文互联网领域各项排行中不是最大就是最多.2012年,百度日均抓取约10亿网页,处理超过100PB(1PB=1024TB)的数据.过去10年,百度网页搜索

大数据行业里的两大误区

http://www.cognoschina.net/club/thread-68835-1-1.html http://www.cognoschina.net/club/thread-68837-1-1.html 大数据行业里的误区 大数据这个词,恐怕是近两年IT界炒的最热的词汇之一了,各种.会议,言必谈大数据,“大数据”这个词,在IT界已经成了某果一样的“街机”或者叫 “街词”,不跟风说两句“大数据长,大数据短”都不好意思跟人说自己是搞IT的.从某种程度来讲,大数据这个“圈”太乱了,一点不比