#include"mmapfile.c"
#define trace 0
static inline char * getNameIndex (char **cp, char sentinel) {
char *c = *cp;
int k=0;
while (*c <= sentinel) ++c;
char *s = c;
while (*c > sentinel) {++c;k++;}
*cp = c;
return strndup (s,(size_t)k);
}
int compare_file(char *file1,char *file2){
int num=0;
FILE *fp_source,*fp_result;
char *file1_start,*file1_end;
char *file2_start,*file2_end,*file2_first;
//str1 and str2 come from the file1,str3 and str4 are from file2
char *str1,*str2,*str3,*str4,*fname;
struct stat st;
struct stat st2;
int line1=0;
int line2=0;
file1_start = mmapFile (fp_source = openFile (file1), &st);
file1_end = file1_start + st.st_size;
file2_start=file2_first= mmapFile (fp_result = openFile (file2), &st2);
file2_end = file2_first + st2.st_size;
while(file1_start<file1_end){
str1=getNameIndex(&file1_start,'-');
str2=getNameIndex(&file1_start,'-');
line1++;
line2=0;
if(trace){fprintf(stderr,"%s,%s,\n",str1,str2);}
file2_start=file2_first;
while(file2_start<file2_end){
str3=getNameIndex(&file2_start,'-');
str4=getNameIndex(&file2_start,'-');
line2++;
///compare two pairs of interaction
if(strcmp(str1,str3)==0){
if(strcmp(str2,str4)==0){
num++;
fprintf(stderr,"1:str1=%s,str2=%s,line1=%d ",str1,str2,line1);
fprintf(stderr,"str3=%s,str4=%s,line2=%d\n",str3,str4,line2);
break;
}
if(trace){fprintf(stderr,"here 42\n");}
}
else{
if(strcmp(str1,str4)==0){
if(strcmp(str2,str3)==0){
num++;
fprintf(stderr,"1:str1=%s,str2=%s,line1=%d ",str1,str2,line1);
fprintf(stderr,"str3=%s,str4=%s,line2=%d\n",str3,str4,line2);
break;
}
}
}
}
}
fclose(fp_result);
fclose(fp_source);
return num;
}
int main(){
char file1[]="pos_interaction.txt";//"922.txt";
char file2[]="765.txt";
int number=0;
int i=0;
char *fname[28]={"neg_1.txt","neg_2.txt","neg_3.txt","neg_4.txt","neg_5.txt","neg_6.txt","neg_7.txt","neg_8.txt","neg_9.txt","neg_10.txt","neg_11.txt","neg_12.txt","neg_13.txt","neg_14.txt","neg_15.txt","neg_16.txt","neg_17.txt","neg_18.txt","neg_19.txt","neg_20.txt","neg_21.txt","neg_22.txt","neg_23.txt","neg_24.txt","neg_25.txt","neg_26.txt","neg_27.txt","neg_28.txt"};
for(i=0;i<28;i++){
number+=compare_file(fname[i],file2);
fprintf(stderr,"\nthe %d result is %d .\n",i,number);break;
}
return ;
}
13 个解决方案
#1
再说明一下
getNameIndex ()函数是获取一个字符串
文件中的数据格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
。。。。
本程序是用来比较两个文件中的每一行是否相同,让后给出相同的数目
还希望各位能给点意见
getNameIndex ()函数是获取一个字符串
文件中的数据格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
。。。。
本程序是用来比较两个文件中的每一行是否相同,让后给出相同的数目
还希望各位能给点意见
#2
。。。。。。。
没人顶?
没人顶?
#3
太长 慢慢看
#4
先拜谢,^_^
#5
水平低 看不出来
#6
根本无法编译怎么找错误阿!!!
#7
^_^,不好意思,忘了,还有一个文件”mmapfile.c“
下面是这个文件的代码:
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
FILE *openFile ( char *fname) {
FILE *f;
if ((f = fopen (fname, "r+")) == NULL) perror (fname), exit (1);
return f;
}
char *mmapFile (FILE *f, struct stat *stp) {
fstat (fileno (f), stp);
char *c = (char *)
mmap ((void *) 0, stp->st_size, PROT_READ|PROT_WRITE, MAP_SHARED,
fileno (f), 0);
if (c == MAP_FAILED) perror ("mmap"), exit (1);
#ifdef MADV_SEQUENTIAL
madvise ((void *) c, stp->st_size, MADV_SEQUENTIAL);
#endif
return c;
}
下面是这个文件的代码:
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
FILE *openFile ( char *fname) {
FILE *f;
if ((f = fopen (fname, "r+")) == NULL) perror (fname), exit (1);
return f;
}
char *mmapFile (FILE *f, struct stat *stp) {
fstat (fileno (f), stp);
char *c = (char *)
mmap ((void *) 0, stp->st_size, PROT_READ|PROT_WRITE, MAP_SHARED,
fileno (f), 0);
if (c == MAP_FAILED) perror ("mmap"), exit (1);
#ifdef MADV_SEQUENTIAL
madvise ((void *) c, stp->st_size, MADV_SEQUENTIAL);
#endif
return c;
}
#8
这是c++程序吧?正在看!
#9
能不能给一组数据试一试???
#10
数据格式我已经给出来了,用于比较的两个文件都是.txt的
格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
其中一个文件是1000行,另外一个是2700000行
第二文件如果是100000行的话一般不会出错
大于才会的
格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
其中一个文件是1000行,另外一个是2700000行
第二文件如果是100000行的话一般不会出错
大于才会的
#11
^_^
忘记了来结帖,问题已经解决了,应为程序中没有free()内存,造成了内存泄漏。
忘记了来结帖,问题已经解决了,应为程序中没有free()内存,造成了内存泄漏。
#12
汗。。。
浏览器出错,下次来结吧
浏览器出错,下次来结吧
#13
不懂
#1
再说明一下
getNameIndex ()函数是获取一个字符串
文件中的数据格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
。。。。
本程序是用来比较两个文件中的每一行是否相同,让后给出相同的数目
还希望各位能给点意见
getNameIndex ()函数是获取一个字符串
文件中的数据格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
。。。。
本程序是用来比较两个文件中的每一行是否相同,让后给出相同的数目
还希望各位能给点意见
#2
。。。。。。。
没人顶?
没人顶?
#3
太长 慢慢看
#4
先拜谢,^_^
#5
水平低 看不出来
#6
根本无法编译怎么找错误阿!!!
#7
^_^,不好意思,忘了,还有一个文件”mmapfile.c“
下面是这个文件的代码:
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
FILE *openFile ( char *fname) {
FILE *f;
if ((f = fopen (fname, "r+")) == NULL) perror (fname), exit (1);
return f;
}
char *mmapFile (FILE *f, struct stat *stp) {
fstat (fileno (f), stp);
char *c = (char *)
mmap ((void *) 0, stp->st_size, PROT_READ|PROT_WRITE, MAP_SHARED,
fileno (f), 0);
if (c == MAP_FAILED) perror ("mmap"), exit (1);
#ifdef MADV_SEQUENTIAL
madvise ((void *) c, stp->st_size, MADV_SEQUENTIAL);
#endif
return c;
}
下面是这个文件的代码:
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
FILE *openFile ( char *fname) {
FILE *f;
if ((f = fopen (fname, "r+")) == NULL) perror (fname), exit (1);
return f;
}
char *mmapFile (FILE *f, struct stat *stp) {
fstat (fileno (f), stp);
char *c = (char *)
mmap ((void *) 0, stp->st_size, PROT_READ|PROT_WRITE, MAP_SHARED,
fileno (f), 0);
if (c == MAP_FAILED) perror ("mmap"), exit (1);
#ifdef MADV_SEQUENTIAL
madvise ((void *) c, stp->st_size, MADV_SEQUENTIAL);
#endif
return c;
}
#8
这是c++程序吧?正在看!
#9
能不能给一组数据试一试???
#10
数据格式我已经给出来了,用于比较的两个文件都是.txt的
格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
其中一个文件是1000行,另外一个是2700000行
第二文件如果是100000行的话一般不会出错
大于才会的
格式如下:
YGR204W YIR038C
YGR204W YJL034W
YGR204W YJL041W
YGR204W YJL053W
YGR204W YJL079C
YGR204W YJL132W
其中一个文件是1000行,另外一个是2700000行
第二文件如果是100000行的话一般不会出错
大于才会的
#11
^_^
忘记了来结帖,问题已经解决了,应为程序中没有free()内存,造成了内存泄漏。
忘记了来结帖,问题已经解决了,应为程序中没有free()内存,造成了内存泄漏。
#12
汗。。。
浏览器出错,下次来结吧
浏览器出错,下次来结吧
#13
不懂