一个简单的数据收集程序

  1. #include<stdio.h>   
  2. #include<string.h>  
  3. #define BufferLength 500  
  4. #define NUM_BENCHMARKS 10  
  5. int isBufferContainsStr(char buffer[], char str[],  int n)   
  6. {  
  7.   
  8.   
  9.     int isContains=0;   
  10.     int i = 0;  
  11.     int j = 0;  
  12.     int k = 0;  
  13.     for(i=0; i < BufferLength - n; i++)   
  14.     {    
  15.         k = i;  
  16.         j = 0;  
  17.         while(j < n && buffer[k] == str[j]){  
  18.             k++;  
  19.             j++;  
  20.         }  
  21.         if(j == n){  
  22.             isContains = 1;  
  23.         }  
  24.     }  
  25.     return isContains;  
  26. }  
  27.    
  28. int main()  
  29. {  
  30.   
  31.    
  32.     //总共改5处   
  33.     FILE   *fp,*fw;     
  34.     char buffer[BufferLength];  
  35.     //1路径   
  36.     char directoryOutput[] = "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out\\output.txt";  
  37.     //2路径   
  38.     char directory[200] =  "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out";  
  39.     char benchmarks[NUM_BENCHMARKS][20]={"FFT""Radix""WaterNSquared""FMM""LUContig""OceanContig""401.bzip2""429.mcf""454.calculix""462.libquantum"};  
  40.     //3统计的文件  
  41.     char stats[]="\\DDR3_micron_64M_8B_x4_sg15\\32GB.1Ch.8R.scheme4.open_page.32768TQ.32768CQ.RtB.pRank.vis";  
  42.     //char stats[]="\\stats.txt";  
  43.     //4统计的字符串   
  44.     char findStr[] = "TotalRefreshCount";//要查找的字符串,读取该字符串后面的数字,即读取后面的不命中率  
  45.     char returnStr[20];//  
  46.   
  47.     int n = 0;  
  48.     int i = 0;  
  49.     int j = 0;  
  50.     int  length;  
  51.     int k = 0;  
  52.   
  53.     //新建写文件,把不命中率写入其中  
  54.     fw = fopen(directoryOutput , "w");  
  55.     if(fw==NULL)  
  56.     {  
  57.         printf("can not open file write\n");  
  58.         return 1;  
  59.     }  
  60.   
  61.     for(j = 0; j < NUM_BENCHMARKS; j++)  
  62.     {  
  63.         //使 directory[]为 "F:\\32GB\\32GB_RAIDE_512ms\\m5out";   
  64.         //修改的第5处   
  65.         strcpy(directory, "F:\\32GB\\32GB_DRAM_ECP_1024ms\\m5out");  
  66.           
  67.         i = 0;  
  68.         n=0;  
  69.         k = 0;  
  70.           
  71.         while(directory[i] != '\0'){  
  72.             i++;  
  73.         }  
  74.           
  75.         directory[i] = '\\';  
  76.         i++;  
  77.           
  78.         while(benchmarks[j][k] != '\0')  
  79.         {  
  80.             directory[i] = benchmarks[j][k];  
  81.             k++;  
  82.             i++;  
  83.         }  
  84.   
  85.         //完成读目录的拼接"F:\\32GB\\32GB_RAIDE_512ms\\m5out\\stats.txt"  
  86.         while(stats[n] != '\0')  
  87.         {  
  88.             directory[i] = stats[n];  
  89.             n++;  
  90.             i++;  
  91.         }  
  92.         //字符串结尾  
  93.         directory[i] = '\0';  
  94.         //打印信息   
  95.         printf("%s\n" , directory);  
  96.         fp=fopen(directory,"r");    
  97.     
  98.         //读文件打不开  
  99.         if(fp==NULL)  
  100.         {  
  101.             printf("can not open file read\n");  
  102.             return 1;  
  103.         }  
  104.   
  105.         //从文件中取一行,存在长度为BufferLength的buffer中,每次读取一行,  
  106.         while(fgets(buffer,BufferLength,fp))  
  107.         {      
  108.             //比较的时候去掉'\0',长度减一  
  109.             length = strlen(findStr)-1;  
  110.             //如果从文件中所取的一行(存在buffer中)包含findStr,则返回1,然后再从buffer中找到returnStr  
  111.             if(isBufferContainsStr(buffer, findStr, length) == 1)  
  112.             {  
  113.                 //不是数字  
  114.                 i = 0;  
  115.                 k = 0;  
  116.                 while(!((buffer[i] >= '0') && (buffer[i] <= '9') || buffer[i] == '.')){  
  117.                     i++;  
  118.                 }  
  119.                 //将buffer中的returnStr存放到字符数组returnStr中  
  120.                   
  121.                   
  122.                 //不是数字  
  123.                 k = 0;  
  124.                 while((buffer[i] >= '0') && (buffer[i] <= '9') || buffer[i] == '.'){  
  125.                     returnStr[k] = buffer[i];  
  126.                     putchar(buffer[i]);  
  127.                     i++;  
  128.                     k++;  
  129.                 }  
  130.                 returnStr[k] = '\0';//returnStr字符串结束符  
  131.                 break;  
  132.             }  
  133.             
  134.         }   
  135.         fclose(fp);//关闭读文件  
  136.         fputs(returnStr,fw);//将写文件关闭  
  137.         fputc('\n',fw);//这里用换行而不是空格的原因是,用换行方便把 输出文件 所得31个returnStr拷贝到excel表中,用空格不方便拷贝。  
  138.    
  139.     }  
  140.     fclose(fw);//关闭写文件,不命中率已经全部写进文件  
  141.     printf("run success,please see the file:\n %s\n" , directoryOutput);  
  142.       
  143.     return 1;  
  144. }  
Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.