#include<stdio.h> #include<string.h> #define BufferLength 500 #define NUM_BENCHMARKS 10 int isBufferContainsStr(char buffer[], char str[], int n) { int isContains=0; int i = 0; int j = 0; int k = 0; for(i=0; i < BufferLength - n; i++) { k = i; j = 0; while(j < n && buffer[k] == str[j]){ k++; j++; } if(j == n){ isContains = 1; } } return isContains; } int main() { //总共改5处 FILE *fp,*fw; char buffer[BufferLength]; //1路径 char directoryOutput[] = "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out\\output.txt"; //2路径 char directory[200] = "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out"; char benchmarks[NUM_BENCHMARKS][20]={"FFT", "Radix", "WaterNSquared", "FMM", "LUContig", "OceanContig", "401.bzip2", "429.mcf", "454.calculix", "462.libquantum"}; //3统计的文件 char stats[]="\\DDR3_micron_64M_8B_x4_sg15\\32GB.1Ch.8R.scheme4.open_page.32768TQ.32768CQ.RtB.pRank.vis"; //char stats[]="\\stats.txt"; //4统计的字符串 char findStr[] = "TotalRefreshCount";//要查找的字符串,读取该字符串后面的数字,即读取后面的不命中率 char returnStr[20];// int n = 0; int i = 0; int j = 0; int length; int k = 0; //新建写文件,把不命中率写入其中 fw = fopen(directoryOutput , "w"); if(fw==NULL) { printf("can not open file write\n"); return 1; } for(j = 0; j < NUM_BENCHMARKS; j++) { //使 directory[]为 "F:\\32GB\\32GB_RAIDE_512ms\\m5out"; //修改的第5处 strcpy(directory, "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out"); i = 0; n=0; k = 0; while(directory[i] != ‘\0‘){ i++; } directory[i] = ‘\\‘; i++; while(benchmarks[j][k] != ‘\0‘) { directory[i] = benchmarks[j][k]; k++; i++; } //完成读目录的拼接"F:\\32GB\\32GB_RAIDE_512ms\\m5out\\stats.txt" while(stats[n] != ‘\0‘) { directory[i] = stats[n]; n++; i++; } //字符串结尾 directory[i] = ‘\0‘; //打印信息 printf("%s\n" , directory); fp=fopen(directory,"r"); //读文件打不开 if(fp==NULL) { printf("can not open file read\n"); return 1; } //从文件中取一行,存在长度为BufferLength的buffer中,每次读取一行, while(fgets(buffer,BufferLength,fp)) { //比较的时候去掉‘\0‘,长度减一 length = strlen(findStr)-1; //如果从文件中所取的一行(存在buffer中)包含findStr,则返回1,然后再从buffer中找到returnStr if(isBufferContainsStr(buffer, findStr, length) == 1) { //不是数字 i = 0; k = 0; while(!((buffer[i] >= ‘0‘) && (buffer[i] <= ‘9‘) || buffer[i] == ‘.‘)){ i++; } //将buffer中的returnStr存放到字符数组returnStr中 //不是数字 k = 0; while((buffer[i] >= ‘0‘) && (buffer[i] <= ‘9‘) || buffer[i] == ‘.‘){ returnStr[k] = buffer[i]; putchar(buffer[i]); i++; k++; } returnStr[k] = ‘\0‘;//returnStr字符串结束符 break; } } fclose(fp);//关闭读文件 fputs(returnStr,fw);//将写文件关闭 fputc(‘\n‘,fw);//这里用换行而不是空格的原因是,用换行方便把 输出文件 所得31个returnStr拷贝到excel表中,用空格不方便拷贝。 } fclose(fw);//关闭写文件,不命中率已经全部写进文件 printf("run success,please see the file:\n %s\n" , directoryOutput); return 1; }
原文:http://blog.csdn.net/wyj7260/article/details/21606083