#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