批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

这也太快了吧!!!c处理csv文件(求和,平均值,最大值,最小值)3W多行秒处理!

本帖最后由 Gin_Q 于 2020-2-27 10:09 编辑

命令行用法:D:\GIN\c\test>csv分析.exe source.csv result.txt 1
  1. //编译器 Dev-C++  5.11
  2. //Rev 02
  3. //Author By Gin
  4. //增加打印格式
  5. //.cpp
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. int main(int argv,char *argc[])
  10. {
  11. int delims(char *ser,char *res,int res_size);
  12. FILE *file_p(char *path,const char *mode);
  13. void form_printf(FILE *fp,char *item,double *sum,double *min,double *max_1,double *avg,int width,int T_max,int off);
  14. int check_width(FILE *fp);
  15. int check_high(FILE *fp);
  16. FILE *source_txt=file_p(argc[1],"r"); //源文件
  17. FILE *result_txt=file_p(argc[2],"w"); //结果
  18. int off=atoi(argc[3]); //输出结果格式
  19. int width=check_width(source_txt);        //文件列数统计
  20. int high=check_high(source_txt);        //文件行数统计
  21. int Max=10240,T_max=50;
  22. char temp[width][T_max]; //用于临时储存一行数据 (用于atof转换)
  23. char item[width][T_max]={"0"}; //储存数据项目名
  24. char line_size[Max]="0"; //储存一行数据空间
  25. double sum[width]={0}; //储存一行数据
  26. int nu_line=0; //用来储存文件一行数据个数
  27. rewind(source_txt);
  28. fgets(line_size,Max,source_txt);
  29. delims(line_size,item[0],T_max);                     //将第一行的标题单独存放
  30. int i=0,k=0,j=0,count=0;
  31. double min[width]={0},max_1[width]={0};   //最大值,最小值
  32. while (fgets(line_size,Max,source_txt)!=NULL)
  33. {
  34. count++;
  35. nu_line=delims(line_size,temp[0],T_max);
  36. for (i=1;*(temp[i])!='\0';i++)    //(i=1)跳过第一列的数据
  37. {
  38. if (i<nu_line) sum[i-1]+=atof(temp[i]);    //将每一项数据相加
  39. if (count==1)
  40. {
  41. min[i-1]=atof(temp[i]); //最少值(初始化)
  42. max_1[i-1]=atof(temp[i]);   //最大值(初始化)
  43. }
  44. else
  45. {
  46. if (atof(temp[i]) > max_1[i-1]) max_1[i-1]=atof(temp[i]);  //最大值
  47. if (atof(temp[i]) < min[i-1]) min[i-1]=atof(temp[i]);      //最小值
  48. }
  49. }
  50. }
  51. double avg[width]={0};      //平均值
  52. for (i=0;i<width-1;i++)
  53. {
  54. if (i<nu_line-1) avg[i]=sum[i]/count;   //最后一行如果小于width
  55. else
  56. {
  57. avg[i]=sum[i]/(count-1);
  58. }
  59. }
  60. form_printf(result_txt,item[0],sum,min,max_1,avg,width,T_max,off);
  61. fclose(source_txt);
  62. fclose(result_txt);
  63. return 0;
  64. }
  65. int check_width(FILE *fp)
  66. {
  67. rewind(fp);
  68. char t;
  69. int w=1;
  70. for (;(t=fgetc(fp))!='\n';)
  71. {
  72. if (t==',') w++;
  73. }
  74. return w;
  75. }
  76. int check_high(FILE *fp)
  77. {
  78. rewind(fp);
  79. int h=0,size=10240;
  80. char temp[size]="0";
  81. for (;fgets(temp,size,fp)!=NULL;h++);
  82. return h-1; //去掉第一行
  83. }
  84. //分割数据
  85. int delims(char *sou,char *res,int res_size)
  86. {
  87. int j=0,k=0,i=0,n=0;
  88. for (;sou[i]!='\0';i++)
  89. {
  90. if (sou[i]!=',' && sou[i]!=' ')
  91. {
  92. *(res+j*res_size+k)=sou[i];
  93. k++;
  94. }
  95. if (sou[i]==',')
  96. {
  97. *(res+j*res_size+k)='\0';
  98. j++,n++,k=0;
  99. }
  100. if (sou[i+1]=='\0') *(res+j*res_size+k-1)='\0';  //把最后一个符号替换
  101. }
  102. return n+1; //加上最后一行
  103. }
  104. FILE *file_p(char *path,const char *mode)
  105. {
  106. FILE *fp;
  107. if ((fp=fopen(path,mode))==NULL)
  108. {
  109. printf("%s open faile!",path);
  110. exit(0);
  111. }
  112. return fp;
  113. }
  114. void form_printf(FILE *fp,char *item,double *sum,double *min,double *max_1,double *avg,int width,int T_max,int off)
  115. {
  116. int i=0;
  117. if (off==1)
  118. {
  119. char form='+';
  120. char form_1='|';
  121. char form_2[22]="---------------------" ;
  122. char form_3[32]="-------------------------------" ;
  123. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  124. fprintf(fp,"%c %-30s%c %-20s%c %-20s%c %-20s%c %-20s%c\n",form_1,"Item",form_1,"Sum",form_1,"Min",form_1,"Max",form_1,"Avg",form_1);
  125. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  126. for (i=0;i<width-1;i++) fprintf(fp,"%c %-30s%c %-20f%c %-20f%c %-20f%c %-20f%c\n",form_1,item+i*T_max+T_max,form_1,sum[i],form_1,min[i],form_1,max_1[i],form_1,avg[i],form_1);
  127. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  128. }
  129. else if (off==2)
  130. {
  131. char form='+';
  132. char form_1='|';
  133. char form_2[22]="---------------------" ;
  134. char form_3[32]="-------------------------------" ;
  135. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  136. fprintf(fp,"%c %-30s%c %-20s%c %-20s%c %-20s%c %-20s%c\n",form_1,"Item",form_1,"Sum",form_1,"Min",form_1,"Max",form_1,"Avg",form_1);
  137. for (i=0;i<width-1;i++) fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n%c %-30s%c %-20f%c %-20f%c %-20f%c %-20f%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form,form_1,item+i*T_max+T_max,form_1,sum[i],form_1,min[i],form_1,max_1[i],form_1,avg[i],form_1);
  138. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  139. }
  140. else
  141. {
  142. fprintf(fp,"%-30s%-20s%-20s%-20s%-20s\n","Item","Sum","Min","Max","Avg");
  143. for (i=0;i<width-1;i++) fprintf(fp,"%-30s%-20f%-20f%-20f%-20f\n",item+i*T_max+T_max,sum[i],min[i],max_1[i],avg[i]);
  144. }
  145. }
复制代码

本帖最后由 Gin_Q 于 2020-2-26 15:31 编辑

结果!【格式0】
  1. Item                          Sum                 Min                 Max                 Avg                 
  2. VDDCR_GFXCurrent(A)[0](A)     4502714.966540      2.007840            244.956880          123.755359         
  3. GPUTemperature(C)[0](C)       2933954.125140      36.745070           84.673640           80.638581           
  4. JunctionTemperature(C)[0](C)  3387563.903270      36.784480           99.827960           93.105868           
  5. MemTemperature(C)[0](C)       3384580.249270      34.000000           98.000000           93.023863           
  6. VR_GFX(C)[0](C)               2967047.724460      27.000000           85.000000           81.548145           
  7. VR_SOC(C)[0](C)               2790556.417030      29.000000           79.000000           76.697351           
  8. VR_MEM(C)[0](C)               0.000000            0.000000            0.000000            0.000000            
  9. VR_VDDCI(C)[0](C)             0.000000            0.000000            0.000000            0.000000            
  10. Liquid0(C)[0](C)              0.000000            0.000000            0.000000            0.000000            
  11. Liquid1(C)[0](C)              0.000000            0.000000            0.000000            0.000000            
  12. PLX(C)[0](C)                  0.000000            0.000000            0.000000            0.000000            
  13. Min(C)[0](C)                  2755640.988070      35.354680           79.158970           75.737714           
  14. GFXCLKFreq[0]()               69755491.926140     804.097780          2067.620360         1917.202395         
  15. PWM[0]()                      1782709.728940      0.000000            60.548110           48.997079           
  16. FANSpeed[RPM][0]()            78159803.685400     0.000000            2452.709470         2148.191614         
  17. LimitPPT0(W)[0](W)            7094880.000000      195.000000          195.000000          195.000000         
  18. ValuePPT0(W)[0](W)            6370334.954680      10.208000           195.003540          175.086163         
  19. GFXActivity(%)[0](%)          3120834.797830      0.073530            99.975200           85.774923           
  20. PCIeLinkSpeed(GT/s)[0](GT/s)  289350.500000       2.500000            8.000000            7.952685            
  21. PCIeLinkWidth[0]()            582144.000000       16.000000           16.000000           16.000000           
  22. PCIeCorrectableError[0]()     0.000000            0.000000            0.000000            0.000000            
  23. PCIeUncorrectableError[0]()   0.000000            0.000000            0.000000            0.000000            
  24. PCIeResidencyGen1(%)[0](%)    114556.277570       2.522750            51.898740           3.148534            
  25. PCIeResidencyGen2(%)[0](%)    0.000000            0.000000            0.000000            0.000000            
  26. PCIeResidencyGen3(%)[0](%)    3523843.723860      48.101270           97.477250           96.851466           
  27. PCIeResidencyGen4(%)[0](%)    0.000000            0.000000            0.000000            0.000000            
  28. PCIeResidencyL0(%)[0](%)      3638374.158400      99.997400           100.000000          99.999290           
  29. PCIeResidencyL0s(%)[0](%)     0.000000            0.000000            0.000000            0.000000            
  30. PCIeResidencyL1(%)[0](%)      0.000000            0.000000            0.000000            0.000000            
  31. FanPWMreading[%][0](%)        1782582.000000      0.000000            60.000000           48.993569           
  32. mclk[0](MHz)                  62883779.700000     101.000000          32327430.000000     1728.383577         
  33. sclk[0](MHz)                  69639761.000000     796.000000          2084.000000         1914.074183         
复制代码

TOP

本帖最后由 Gin_Q 于 2020-2-26 16:27 编辑

结果!【格式1】
  1. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  2. | Item                          | Sum                 | Min                 | Max                 | Avg                 |
  3. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  4. | VDDCR_GFXCurrent(A)[0](A)     | 4502714.966540      | 2.007840            | 244.956880          | 123.755359          |
  5. | GPUTemperature(C)[0](C)       | 2933954.125140      | 36.745070           | 84.673640           | 80.638581           |
  6. | JunctionTemperature(C)[0](C)  | 3387563.903270      | 36.784480           | 99.827960           | 93.105868           |
  7. | MemTemperature(C)[0](C)       | 3384580.249270      | 34.000000           | 98.000000           | 93.023863           |
  8. | VR_GFX(C)[0](C)               | 2967047.724460      | 27.000000           | 85.000000           | 81.548145           |
  9. | VR_SOC(C)[0](C)               | 2790556.417030      | 29.000000           | 79.000000           | 76.697351           |
  10. | VR_MEM(C)[0](C)               | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  11. | VR_VDDCI(C)[0](C)             | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  12. | Liquid0(C)[0](C)              | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  13. | Liquid1(C)[0](C)              | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  14. | PLX(C)[0](C)                  | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  15. | Min(C)[0](C)                  | 2755640.988070      | 35.354680           | 79.158970           | 75.737714           |
  16. | GFXCLKFreq[0]()               | 69755491.926140     | 804.097780          | 2067.620360         | 1917.202395         |
  17. | PWM[0]()                      | 1782709.728940      | 0.000000            | 60.548110           | 48.997079           |
  18. | FANSpeed[RPM][0]()            | 78159803.685400     | 0.000000            | 2452.709470         | 2148.191614         |
  19. | LimitPPT0(W)[0](W)            | 7094880.000000      | 195.000000          | 195.000000          | 195.000000          |
  20. | ValuePPT0(W)[0](W)            | 6370334.954680      | 10.208000           | 195.003540          | 175.086163          |
  21. | GFXActivity(%)[0](%)          | 3120834.797830      | 0.073530            | 99.975200           | 85.774923           |
  22. | PCIeLinkSpeed(GT/s)[0](GT/s)  | 289350.500000       | 2.500000            | 8.000000            | 7.952685            |
  23. | PCIeLinkWidth[0]()            | 582144.000000       | 16.000000           | 16.000000           | 16.000000           |
  24. | PCIeCorrectableError[0]()     | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  25. | PCIeUncorrectableError[0]()   | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  26. | PCIeResidencyGen1(%)[0](%)    | 114556.277570       | 2.522750            | 51.898740           | 3.148534            |
  27. | PCIeResidencyGen2(%)[0](%)    | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  28. | PCIeResidencyGen3(%)[0](%)    | 3523843.723860      | 48.101270           | 97.477250           | 96.851466           |
  29. | PCIeResidencyGen4(%)[0](%)    | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  30. | PCIeResidencyL0(%)[0](%)      | 3638374.158400      | 99.997400           | 100.000000          | 99.999290           |
  31. | PCIeResidencyL0s(%)[0](%)     | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  32. | PCIeResidencyL1(%)[0](%)      | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  33. | FanPWMreading[%][0](%)        | 1782582.000000      | 0.000000            | 60.000000           | 48.993569           |
  34. | mclk[0](MHz)                  | 62883779.700000     | 101.000000          | 32327430.000000     | 1728.383577         |
  35. | sclk[0](MHz)                  | 69639761.000000     | 796.000000          | 2084.000000         | 1914.074183         |
  36. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
复制代码

TOP

本帖最后由 Gin_Q 于 2020-2-26 16:28 编辑

结果!【格式2】
  1. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  2. | Item                          | Sum                 | Min                 | Max                 | Avg                 |
  3. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  4. | VDDCR_GFXCurrent(A)[0](A)     | 4502714.966540      | 2.007840            | 244.956880          | 123.755359          |
  5. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  6. | GPUTemperature(C)[0](C)       | 2933954.125140      | 36.745070           | 84.673640           | 80.638581           |
  7. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  8. | JunctionTemperature(C)[0](C)  | 3387563.903270      | 36.784480           | 99.827960           | 93.105868           |
  9. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  10. | MemTemperature(C)[0](C)       | 3384580.249270      | 34.000000           | 98.000000           | 93.023863           |
  11. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  12. | VR_GFX(C)[0](C)               | 2967047.724460      | 27.000000           | 85.000000           | 81.548145           |
  13. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  14. | VR_SOC(C)[0](C)               | 2790556.417030      | 29.000000           | 79.000000           | 76.697351           |
  15. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  16. | VR_MEM(C)[0](C)               | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  17. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  18. | VR_VDDCI(C)[0](C)             | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  19. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  20. | Liquid0(C)[0](C)              | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  21. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  22. | Liquid1(C)[0](C)              | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  23. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  24. | PLX(C)[0](C)                  | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  25. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  26. | Min(C)[0](C)                  | 2755640.988070      | 35.354680           | 79.158970           | 75.737714           |
  27. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  28. | GFXCLKFreq[0]()               | 69755491.926140     | 804.097780          | 2067.620360         | 1917.202395         |
  29. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  30. | PWM[0]()                      | 1782709.728940      | 0.000000            | 60.548110           | 48.997079           |
  31. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  32. | FANSpeed[RPM][0]()            | 78159803.685400     | 0.000000            | 2452.709470         | 2148.191614         |
  33. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  34. | LimitPPT0(W)[0](W)            | 7094880.000000      | 195.000000          | 195.000000          | 195.000000          |
  35. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  36. | ValuePPT0(W)[0](W)            | 6370334.954680      | 10.208000           | 195.003540          | 175.086163          |
  37. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  38. | GFXActivity(%)[0](%)          | 3120834.797830      | 0.073530            | 99.975200           | 85.774923           |
  39. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  40. | PCIeLinkSpeed(GT/s)[0](GT/s)  | 289350.500000       | 2.500000            | 8.000000            | 7.952685            |
  41. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  42. | PCIeLinkWidth[0]()            | 582144.000000       | 16.000000           | 16.000000           | 16.000000           |
  43. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  44. | PCIeCorrectableError[0]()     | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  45. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  46. | PCIeUncorrectableError[0]()   | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  47. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  48. | PCIeResidencyGen1(%)[0](%)    | 114556.277570       | 2.522750            | 51.898740           | 3.148534            |
  49. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  50. | PCIeResidencyGen2(%)[0](%)    | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  51. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  52. | PCIeResidencyGen3(%)[0](%)    | 3523843.723860      | 48.101270           | 97.477250           | 96.851466           |
  53. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  54. | PCIeResidencyGen4(%)[0](%)    | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  55. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  56. | PCIeResidencyL0(%)[0](%)      | 3638374.158400      | 99.997400           | 100.000000          | 99.999290           |
  57. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  58. | PCIeResidencyL0s(%)[0](%)     | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  59. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  60. | PCIeResidencyL1(%)[0](%)      | 0.000000            | 0.000000            | 0.000000            | 0.000000            |
  61. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  62. | FanPWMreading[%][0](%)        | 1782582.000000      | 0.000000            | 60.000000           | 48.993569           |
  63. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  64. | mclk[0](MHz)                  | 62883779.700000     | 101.000000          | 32327430.000000     | 1728.383577         |
  65. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
  66. | sclk[0](MHz)                  | 69639761.000000     | 796.000000          | 2084.000000         | 1914.074183         |
  67. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
复制代码

TOP

回复 3# Gin_Q
最后一项用long long 就有精度了

TOP

回复 5# red2020


    我用的double型 数组应该不是溢出了,比他大了值都是准确的!数据大了就是最后一列出问题!

TOP

回复 5# red2020


    我数组定小了,少了最后一列;问题解决了!
  1. double dou_sum[31]={0};
  2. double dou_sum[32]={0};   //加上就好了
复制代码

TOP

原文件格式【前13行】
  1. time stamp, VDDCR_GFX Current (A) [0] (A), GPU Temperature (C) [0] (C), Junction Temperature (C) [0] (C), Mem Temperature (C) [0] (C), VR_GFX (C) [0] (C), VR_SOC (C) [0] (C), VR_MEM (C) [0] (C), VR_VDDCI (C) [0] (C), Liquid0 (C) [0] (C), Liquid1 (C) [0] (C), PLX (C) [0] (C), Min (C) [0] (C), GFXCLK Freq [0] (), PWM [0] (), FAN Speed [RPM] [0] (), Limit PPT0 (W) [0] (W), Value PPT0 (W) [0] (W), GFX Activity (%) [0] (%), PCIe Link Speed (GT/s) [0] (GT/s), PCIe Link Width [0] (), PCIe Correctable Error [0] (), PCIe Uncorrectable Error [0] (), PCIe Residency Gen 1 (%) [0] (%), PCIe Residency Gen 2 (%) [0] (%), PCIe Residency Gen 3 (%) [0] (%), PCIe Residency Gen 4 (%) [0] (%), PCIe Residency L0 (%) [0] (%), PCIe Residency L0s (%) [0] (%), PCIe Residency L1 (%) [0] (%), Fan PWM reading [%] [0] (%), mclk[0] (MHz), sclk[0] (MHz)
  2. 19:29:01.189, 2.00784, 36.74507, 36.78448, 34.23645, 27.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.35468, 840.95294, 0.00000, 0.00000, 195.00000, 10.20800, 0.67411, 8.00000, 16.00000, 0.00000, 0.00000, 50.00000, 0.00000, 50.00000, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  799.0
  3. 19:29:02.245, 2.00784, 37.07646, 37.30193, 34.00000, 27.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.63988, 1083.11572, 0.00000, 0.00000, 195.00000, 15.59418, 8.34534, 2.50000, 16.00000, 0.00000, 0.00000, 41.66666, 0.00000, 58.33333, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  798.0
  4. 19:29:03.328, 2.00784, 36.84468, 36.91053, 34.00000, 27.13817, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.55442, 859.78790, 0.00000, 0.00000, 195.00000, 11.25746, 1.79272, 8.00000, 16.00000, 0.00000, 0.00000, 42.85714, 0.00000, 57.14286, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  799.0
  5. 19:29:04.375, 2.00784, 36.95381, 36.97800, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.45821, 843.08490, 0.00000, 0.00000, 195.00000, 11.40743, 1.24570, 2.50000, 16.00000, 0.00000, 0.00000, 38.70967, 0.00000, 61.29033, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  798.0
  6. 19:29:05.435, 6.02353, 36.79740, 36.84480, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.48343, 877.18518, 0.00000, 0.00000, 195.00000, 11.50216, 1.88790, 8.00000, 16.00000, 0.00000, 0.00000, 42.50000, 0.00000, 57.50000, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  1856.0
  7. 19:29:06.510, 2.00784, 36.96594, 37.03910, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.58804, 884.69458, 0.00000, 0.00000, 195.00000, 12.11919, 2.64405, 8.00000, 16.00000, 0.00000, 0.00000, 50.00000, 0.00000, 50.00000, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 501.0,  1463.0
  8. 19:29:07.610, 2.00784, 36.99527, 37.04279, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.63160, 902.23077, 0.00000, 0.00000, 195.00000, 11.99589, 2.81013, 2.50000, 16.00000, 0.00000, 0.00000, 50.00000, 0.00000, 50.00000, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  798.0
  9. 19:29:08.710, 2.00784, 37.03320, 37.09886, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.61695, 900.25281, 0.00000, 0.00000, 195.00000, 12.10599, 2.83194, 2.50000, 16.00000, 0.00000, 0.00000, 49.27536, 0.00000, 50.72464, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  798.0
  10. 19:29:09.790, 2.00784, 37.07740, 37.11398, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.70216, 832.81805, 0.00000, 0.00000, 195.00000, 11.13766, 1.00379, 8.00000, 16.00000, 0.00000, 0.00000, 51.89874, 0.00000, 48.10127, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  800.0
  11. 19:29:10.870, 12.04706, 37.09166, 37.14910, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.71678, 849.42194, 0.00000, 0.00000, 195.00000, 11.02654, 1.50605, 2.50000, 16.00000, 0.00000, 0.00000, 51.13636, 0.00000, 48.86364, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  1045.0
  12. 19:29:11.970, 4.01569, 37.51789, 37.59493, 34.00000, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 35.91874, 996.54883, 0.00000, 0.00000, 195.00000, 15.02523, 4.10683, 8.00000, 16.00000, 0.00000, 0.00000, 47.95918, 0.00000, 52.04082, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 101.0,  1652.0
  13. 19:29:13.080, 4.01569, 38.43451, 39.28155, 34.77629, 28.00000, 29.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 36.40010, 1224.01880, 0.00000, 0.00000, 195.00000, 31.80527, 16.07076, 8.00000, 16.00000, 0.00000, 0.00000, 44.44445, 0.00000, 55.55556, 0.00000, 100.00000, 0.00000, 0.00000, 0.00000, 876.0,  799.0
复制代码

TOP

回复 9# xczxczxcz


    C#吗?:victory: 我正在学C!:loveliness: 这个速度我就得已经非常快了!(Intel(R) Celeron(R) CPU G1840 @ 2.80GHz)

TOP

本帖最后由 red2020 于 2020-2-26 23:53 编辑

回复 10# Gin_Q
你们速度都太慢了,我只需要66行代码0.3秒就能处理3万行。在windows下用gcc编译下,甭管你cpu多弱,只需0.3秒3万行。最后一行自带计时器
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define LINE_SIZE 1024
  5. #define FLT_MIN (1.17549e-038)
  6. #define FLT_MAX (3.40282e+038)
  7. #define COLS_SIZE 32
  8. float a[COLS_SIZE][3];
  9. char iName[COLS_SIZE][LINE_SIZE];
  10. int main(int argc, char** argv)
  11. {
  12. clock_t t = clock();
  13. FILE* fp = fopen(argv[1], "rb");
  14. for(int i = 0; i < COLS_SIZE; i ++) a[i][1] = FLT_MAX, a[i][2] = FLT_MIN;
  15. int countLines =  0, colsIndex = 0, strIndex = 0;
  16. char line[LINE_SIZE] = {0};
  17. fgets(line, LINE_SIZE, fp);
  18. char* p = line;
  19. while(*p)
  20. {
  21. switch(*p)
  22. {
  23. case ' ':
  24. case '\t':
  25. case '\r':
  26. case '\n':
  27. break;
  28. case ',':
  29. colsIndex ++;
  30. strIndex = 0;
  31. break;
  32. default:
  33. iName[colsIndex][strIndex++] = *p;
  34. break;
  35. }
  36. p ++;
  37. }
  38. colsIndex = 0;
  39. while(! feof(fp))
  40. {
  41. fgets(line, LINE_SIZE, fp);
  42. p = line;
  43. while(*p)
  44. if(*(p ++) == ',')
  45. {
  46. float t = atof(p);
  47. a[colsIndex][0] += t;
  48. if( t < a[colsIndex][1] ) a[colsIndex][1] = t;
  49. if( t > a[colsIndex][2] ) a[colsIndex][2] = t;
  50. if(++ colsIndex == 32) colsIndex = 0, countLines ++;
  51. }
  52. }
  53. fclose(fp);
  54. printf("%-30.30s %16s %16s %16s %16s\n","Item","Sum","Min","Max","Avg");
  55. for(int i = 0; i < COLS_SIZE; i ++) printf("%-30.30s -> %16.6f %16.6f %16.6f %16.6f\n", iName[i+1], a[i][0], a[i][1], a[i][2], a[i][0]/countLines);
  56. printf("Count %d lines spend time :%d (ms)\n", countLines, clock()-t);
  57. return 0;
  58. }
复制代码
这是效果图,整齐的一塌糊涂
  1. Item                                        Sum              Min              Max              Avg
  2. VDDCR_GFXCurrent(A)[0](A)      ->    214949.328125         2.007840      4000.015625         3.582489
  3. GPUTemperature(C)[0](C)        ->   2227779.500000        36.745071        38.434509        37.129658
  4. JunctionTemperature(C)[0](C)   ->   2235515.250000        36.784481        39.281551        37.258587
  5. MemTemperature(C)[0](C)        ->   2045027.750000        34.000000        34.776291        34.083796
  6. VR_GFX(C)[0](C)                ->   1665636.750000        27.000000        28.000000        27.760613
  7. VR_SOC(C)[0](C)                ->   1740000.000000        29.000000        29.000000        29.000000
  8. VR_MEM(C)[0](C)                ->         0.000000         0.000000         0.000000         0.000000
  9. VR_VDDCI(C)[0](C)              ->         0.000000         0.000000         0.000000         0.000000
  10. Liquid0(C)[0](C)               ->         0.000000         0.000000         0.000000         0.000000
  11. Liquid1(C)[0](C)               ->         0.000000         0.000000         0.000000         0.000000
  12. PLX(C)[0](C)                   ->         0.000000         0.000000         0.000000         0.000000
  13. Min(C)[0](C)                   ->   2140390.000000        35.354679        36.400101        35.673167
  14. GFXCLKFreq[0]()                ->  55465844.000000       832.818054      1224.018799       924.430733
  15. PWM[0]()                       ->         0.000000         0.000000         0.000000         0.000000
  16. FANSpeed[RPM][0]()             ->         0.000000         0.000000         0.000000         0.000000
  17. LimitPPT0(W)[0](W)             ->  11700000.000000       195.000000       195.000000       195.000000
  18. ValuePPT0(W)[0](W)             ->    825928.562500        10.208000        31.805269        13.765476
  19. GFXActivity(%)[0](%)           ->    224570.906250         0.674110        16.070761         3.742848
  20. PCIeLinkSpeed(GT/s)[0](GT/s)   ->    342500.000000         2.500000         8.000000         5.708333
  21. PCIeLinkWidth[0]()             ->    960000.000000        16.000000        16.000000        16.000000
  22. PCIeCorrectableError[0]()      ->         0.000000         0.000000         0.000000         0.000000
  23. PCIeUncorrectableError[0]()    ->         0.000000         0.000000         0.000000         0.000000
  24. PCIeResidencyGen1(%)[0](%)     ->   2802648.250000        38.709671        51.898739        46.710804
  25. PCIeResidencyGen2(%)[0](%)     ->         0.000000         0.000000         0.000000         0.000000
  26. PCIeResidencyGen3(%)[0](%)     ->   3197214.750000        48.101269        61.290329        53.286913
  27. PCIeResidencyGen4(%)[0](%)     ->         0.000000         0.000000         0.000000         0.000000
  28. PCIeResidencyL0(%)[0](%)       ->   6000000.000000       100.000000       100.000000       100.000000
  29. PCIeResidencyL0s(%)[0](%)      ->         0.000000         0.000000         0.000000         0.000000
  30. PCIeResidencyL1(%)[0](%)       ->         0.000000         0.000000         0.000000         0.000000
  31. FanPWMreading[%][0](%)         ->         0.000000         0.000000         0.000000         0.000000
  32. mclk[0](MHz)                   ->  11934225.000000       101.000000       876.000000       198.903750
  33. sclk[0](MHz)                   ->  62049740.000000       798.000000      1856.000000      1034.162333
  34. Count 60000 lines spend time :667 (ms)
复制代码
1

评分人数

TOP

回复 11# red2020


    大佬学了多久了!强 啊!

TOP

  1. //编译器 Dev-C++  5.11
  2. //Rev 02
  3. //Author By Gin
  4. //增加打印格式
  5. //.c
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. int main(int argv,char *argc[])
  10. {
  11. int delims(char *ser,char *res,int res_size);
  12. FILE *file_p(char *path,const char *mode);
  13. void form_printf(FILE *fp,char *item,double *sum,double *min,double *max_1,double *avg,int width,int T_max,int off);
  14. int check_width(FILE *fp);
  15. int check_high(FILE *fp);
  16. FILE *source_txt=file_p(argc[1],"r"); //源文件
  17. FILE *result_txt=file_p(argc[2],"w"); //结果
  18. int off=atoi(argc[3]); //输出结果格式
  19. int width=check_width(source_txt);        //文件列数统计
  20. int high=check_high(source_txt);        //文件行数统计
  21. int Max=10240,T_max=50;
  22. //申请全量内存空间
  23. char (*temp)[T_max]=(char (*)[T_max])calloc(width*T_max,sizeof(char));
  24. char (*item)[T_max]=(char (*)[T_max])calloc(width*T_max,sizeof(char));
  25. char *line_size=(char (*))calloc(Max,sizeof(char));
  26. double *sum=(double *)calloc(width,sizeof(double));
  27. *(*(temp))=0; //用于临时储存一行数据 (用于atof转换)
  28. item[0][0]=0; //储存数据项目名
  29. line_size[0]=0; //储存一行数据空间
  30. *sum=0; //储存一行数据
  31. int nu_line=0; //用来储存文件一行数据个数
  32. double *min=(double *)calloc(width,sizeof(double));
  33. double *max_1=(double *)calloc(width,sizeof(double));
  34. double *avg=(double *)calloc(width,sizeof(double));
  35. min[0]=0,max_1[0]=0,avg[0]=0;;   //最大值,最小值,平均值
  36. rewind(source_txt);
  37. fgets(line_size,Max,source_txt);
  38. delims(line_size,item[0],T_max);                     //将第一行的标题单独存放
  39. int i=0,k=0,j=0,count=0;
  40. while (fgets(line_size,Max,source_txt)!=NULL)
  41. {
  42. count++;
  43. nu_line=delims(line_size,temp[0],T_max);
  44. for (i=1;*(temp[i])!='\0';i++)    //(i=1)跳过第一列的数据
  45. {
  46. if (i<nu_line) sum[i-1]+=atof(temp[i]);    //将每一项数据相加
  47. if (count==1)
  48. {
  49. min[i-1]=atof(temp[i]); //最少值(初始化)
  50. max_1[i-1]=atof(temp[i]);   //最大值(初始化)
  51. }
  52. else
  53. {
  54. if (atof(temp[i]) > max_1[i-1]) max_1[i-1]=atof(temp[i]);  //最大值
  55. if (atof(temp[i]) < min[i-1]) min[i-1]=atof(temp[i]);      //最小值
  56. }
  57. }
  58. }
  59. for (i=0;i<width-1;i++)
  60. {
  61. if (i<nu_line-1) avg[i]=sum[i]/count;   //最后一行如果小于width
  62. else
  63. {
  64. avg[i]=sum[i]/(count-1);
  65. }
  66. }
  67. form_printf(result_txt,item[0],sum,min,max_1,avg,width,T_max,off);
  68. fclose(source_txt);
  69. fclose(result_txt);
  70. //释放内存空间
  71. free(temp);
  72. free(item);
  73. free(line_size);
  74. free(sum);
  75. free(min);
  76. free(max_1);
  77. free(avg);
  78. return 0;
  79. }
  80. int check_width(FILE *fp)
  81. {
  82. rewind(fp);
  83. char t;
  84. int w=1;
  85. for (;(t=fgetc(fp))!='\n';)
  86. {
  87. if (t==',') w++;
  88. }
  89. return w;
  90. }
  91. int check_high(FILE *fp)
  92. {
  93. rewind(fp);
  94. int h=0,size=10240;
  95. char *temp=(char *)malloc(size);
  96. temp[size]=0;
  97. for (;fgets(temp,size,fp)!=NULL;h++);
  98. free(temp);
  99. return h-1; //去掉第一行
  100. }
  101. //分割数据
  102. int delims(char *sou,char *res,int res_size)
  103. {
  104. int j=0,k=0,i=0,n=0;
  105. for (;sou[i]!='\0';i++)
  106. {
  107. if (sou[i]!=',' && sou[i]!=' ')
  108. {
  109. *(res+j*res_size+k)=sou[i];
  110. k++;
  111. }
  112. if (sou[i]==',')
  113. {
  114. *(res+j*res_size+k)='\0';
  115. j++,n++,k=0;
  116. }
  117. if (sou[i+1]=='\0') *(res+j*res_size+k-1)='\0';  //把最后一个符号替换
  118. }
  119. return n+1; //加上最后一行
  120. }
  121. FILE *file_p(char *path,const char *mode)
  122. {
  123. FILE *fp;
  124. if ((fp=fopen(path,mode))==NULL)
  125. {
  126. printf("%s open faile!",path);
  127. getchar();
  128. exit(0);
  129. }
  130. return fp;
  131. }
  132. void form_printf(FILE *fp,char *item,double *sum,double *min,double *max_1,double *avg,int width,int T_max,int off)
  133. {
  134. int i=0;
  135. if (off==1)
  136. {
  137. char form='+';
  138. char form_1='|';
  139. char form_2[22]="---------------------" ;
  140. char form_3[32]="-------------------------------" ;
  141. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  142. fprintf(fp,"%c %-30s%c %-20s%c %-20s%c %-20s%c %-20s%c\n",form_1,"Item",form_1,"Sum",form_1,"Min",form_1,"Max",form_1,"Avg",form_1);
  143. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  144. for (i=0;i<width-1;i++) fprintf(fp,"%c %-30s%c %-20f%c %-20f%c %-20f%c %-20f%c\n",form_1,item+i*T_max+T_max,form_1,sum[i],form_1,min[i],form_1,max_1[i],form_1,avg[i],form_1);
  145. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  146. }
  147. else if (off==2)
  148. {
  149. char form='+';
  150. char form_1='|';
  151. char form_2[22]="---------------------" ;
  152. char form_3[32]="-------------------------------" ;
  153. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  154. fprintf(fp,"%c %-30s%c %-20s%c %-20s%c %-20s%c %-20s%c\n",form_1,"Item",form_1,"Sum",form_1,"Min",form_1,"Max",form_1,"Avg",form_1);
  155. for (i=0;i<width-1;i++) fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n%c %-30s%c %-20f%c %-20f%c %-20f%c %-20f%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form,form_1,item+i*T_max+T_max,form_1,sum[i],form_1,min[i],form_1,max_1[i],form_1,avg[i],form_1);
  156. fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c\n",form,form_3,form,form_2,form,form_2,form,form_2,form,form_2,form);
  157. }
  158. else
  159. {
  160. fprintf(fp,"%-30s%-20s%-20s%-20s%-20s\n","Item","Sum","Min","Max","Avg");
  161. for (i=0;i<width-1;i++) fprintf(fp,"%-30s%-20f%-20f%-20f%-20f\n",item+i*T_max+T_max,sum[i],min[i],max_1[i],avg[i]);
  162. }
  163. }
复制代码

TOP

谭浩强南书快看完了!小甲鱼的视频也看了大半了!感觉对指针还是稀里糊涂的!

TOP

回复 14# Gin_Q
学C语言要注重细节,化繁为简,代码要求精,必要的数学技巧也得学学。看得出你只是刚学会了语法,并没有掌握这门语言。

TOP

本帖最后由 Gin_Q 于 2020-2-27 20:42 编辑

回复 15# red2020


    恩恩,还在努力练习熟练使用指针中!如果不是看了大佬你的代码我还不知道atof还可以这样转换(赶紧敲代码验证一下!真是太棒了!自己绕了一圈..)switch思路放这里真的太适合了!

TOP

返回列表