大文件快点查找相同关键字的问题
同一个目录下有很多文件,具体文件个数会变,每个文件都很大,有可能是很多个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;}