</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");
}
后期需要改善: 汉字的问题。
,