鱼C论坛

 找回密码
 立即注册
查看: 1524|回复: 3

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

[复制链接]
发表于 2020-2-26 15:39:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cool_Breeze 于 2020-2-26 16:29 编辑
  1. 命令行用法: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. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>



  8. int main(int argv,char *argc[])
  9. {       
  10.         int delims(char *ser,char *res,int res_size);
  11.         FILE *file_p(char *path,const char *mode);
  12.         void form_printf(FILE *fp,char *item,double *sum,double *min,double *max_1,double *avg,int width,int T_max,int off);
  13.         int check_width(FILE *fp);
  14.         int check_high(FILE *fp);

  15.         FILE *source_txt=file_p(argc[1],"r");                        //源文件
  16.         FILE *result_txt=file_p(argc[2],"w");                        //结果

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

使用道具 举报

 楼主| 发表于 2020-2-26 15:40:17 | 显示全部楼层
格式【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         
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 15:40:52 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-2-26 16:30 编辑

格式【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. +-------------------------------+---------------------+---------------------+---------------------+---------------------+
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-26 15:42:52 | 显示全部楼层
源文件【前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
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 21:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表