</pre><pre code_snippet_id="576257" snippet_file_name="blog_20150110_2_9643624" name="code" class="objc">
/********************************************************************** * 版权所有 (C)2015, Wu Yingqiang * * 文件名称: BigData.c * 文件标识:无 * 内容摘要:用于演示在大数据中查找指定的字符 * 其它说明:无 * 当前版本: V1.0 * 作 者:吴英强 * 完成日期: 20150109 * * 修改记录1:// 修改历史记录, 包括修改日期、版本号、修改人及修改内容 * 修改日期: 20150109 * 版本号: V1.0 * 修改人: 吴英强 * 修改内容:创建 **********************************************************************/ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include<string.h> #include <time.h> char gPath[200] = "E:\\12306数据.txt"; #define N 119153 char str[100] = { 0 };//要查找的字符串 char **gPtr = NULL;//二级指针存储一级指针数组的地址 /********************************************************************** * 功能描述:获取文件有多少行 * 输入参数:无 * 输出参数:无 * 返回值: 行数 -1-失败 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * -------------------------------------------------------------------------------------- * 20150109 V1.0 Wuyq 创建 ***********************************************************************/ int GetLineNum() { int iFileSize = 0; FILE *pfr = fopen(gPath, "r"); if (pfr == NULL) { return -1; } else { int i = 0; while (!feof(pfr)) { char strbuffer[256] = { 0 }; fgets(strbuffer, 256, pfr);//读取一行 i++; } iFileSize = ftell(pfr); printf("文件大小为:%f M\n", 1.0*iFileSize/1024/1024); fclose(pfr);//关闭文件 return i; } } /********************************************************************** * 功能描述:初始化,把文件内容读到内存中 * 输入参数:无 * 输出参数:无 * 返回值: 无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * -------------------------------------------------------------------------------------- * 20150109 V1.0 Wuyq 创建 ***********************************************************************/ void Init() { gPtr = (char **)malloc(sizeof(char *)*N);//动态分配一个指针数组 memset(gPtr, '\0', sizeof(char *)*N); FILE *pfr = fopen(gPath, "r"); if (pfr == NULL) { printf("初始化失败\n"); return; } else { for (int i = 1; i <= N; i++) { char strbuffer[512] = { 0 }; fgets(strbuffer, 512, pfr);//读取一行 int length = strlen(strbuffer);//求获取长度 if (length != 0) { gPtr[i] = malloc(sizeof(char)*(length + 1));//每个指针分配内存 if (gPtr[i] == NULL) { printf("\nfail"); } strcpy(gPtr[i], strbuffer);//拷贝字符串 //printf("\n%s", gPtr[i]);//打印结果 } } fclose(pfr);//关闭文件 } } /********************************************************************** * 功能描述:释放内存 * 输入参数:无 * 输出参数:无 * 返回值: 无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * -------------------------------------------------------------------------------------- * 20150109 V1.0 Wuyq 创建 ***********************************************************************/ void Free() { for (int i = 1; i <= N; i++) { free(gPtr[i]); } } /********************************************************************** * 功能描述:搜索数据 * 输入参数:要搜索的字符串,由用户输入 * 输出参数:无 * 返回值: 无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * -------------------------------------------------------------------------------------- * 20150109 V1.0 Wuyq 创建 ***********************************************************************/ void Search(char *str) { for (int i = 1; i <= N; i++) { if (gPtr[i] != NULL) { char *p = strstr(gPtr[i], str);//查询 if (p != NULL) { printf("所要查找的字符串, 在第%d行\n", i);//打印结果 printf("%s\n", gPtr[i]); } } } } /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其他说明:无 * 修改日期 版本号 修改人 修改内容 * --------------------------------------------------------------------- * 20150109 V1.0 Wuyq 创建 ***********************************************************************/ void main() { printf("文件总共有%d行\n", GetLineNum()); Init(); printf("已经加载完成\n"); time_t start, end; time(&start); printf("请输入您要查找的数据:\n"); scanf("%s", str); Search(str); time(&end); printf("\n一共用时%d S\n", (unsigned int)(end - start)); Free(); printf("释放内存完成\n"); system("pause"); }
后期需要改善: 汉字的问题。