读书人

大文件快点查找相同关键字的有关问题

发布时间: 2012-04-04 16:38:51 作者: rapoo

大文件快点查找相同关键字的问题
同一个目录下有很多文件,具体文件个数会变,每个文件都很大,有可能是很多个G,每个文件存储的都是一些不重复的数字,并且是顺序存储,现在要从这些文件中快速找出相同次数超过一定次数的数字,相同的次数由用户决定。强调的是要快速,很快的找出。举个例子,假如:
a.txt存储的是:
1,2,3,4,5,6,7,8,9……
b.txt存储的是:
1,3,5,6,7,8,9,10……
c.txt存储的是:
1,5,6,7,8,9,10,11,12……
d.txt存储的是:
1,6,7,8,9,10,11,12,13……
e.txt存储的是:
0,1,8,9,10,11,12,13,14,15,16,……
f.txt存储的是:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17……
如果要找出相同次数为6的数字,那么输出的应该是:1,8,9
如果要找出相同次数为5的数字,那么输出的应该是:6,7,10
规律就是这样的。

请各位大侠帮帮忙,小弟水平有限,请教各位了!谢谢!谢谢!



[解决办法]
仅供参考

C/C++ code
//将out.txt文件中的内容排序并去重,结果保存到unique.txt中#include <stdio.h>#include <stdlib.h>#define MAXLNO 10000000 //能处理的最大行数#define MAXLEN 20       //能处理的最大行宽,包括行尾的\n和字符串尾的\0char buf[MAXLNO][MAXLEN];int ln,i;FILE *f;int cmpfun( const void *arg1, const void *arg2 ) {    return strcmp((const char *)arg1,(const char *)arg2);}int main() {    f=fopen("out.txt","r");    if (NULL==f) {        printf("Can not find file out.txt\n");        return 1;    }    ln=0;    while (1) {        if (NULL==fgets(buf[ln],MAXLEN,f)) break;        ln++;        if (ln>=MAXLNO) {            printf("Lines >%d ignored.",MAXLNO);            break;        }    }    fclose(f);    if (ln>1) qsort(buf,ln,MAXLEN,cmpfun);    f=fopen("unique.txt","w");    if (NULL==f) {        printf("Can not create file unique.txt\n");        return 2;    }    fprintf(f,"%s",buf[0]);    if (ln>1) for (i=1;i<ln;i++) {        if (strcmp((const char *)buf[i-1],(const char *)buf[i])) fprintf(f,"%s",buf[i]);    }    fclose(f);    return 0;} 

读书人网 >C语言

热点推荐