您的位置:首页 > 其它

一个简单的数据收集程序

2014-03-20 11:42 405 查看
#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
 != '\0')
		{
			directory[i] = stats
;
			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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: