代码计算神器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码计算神器相关的知识,希望对你有一定的参考价值。
- 程序功能:精确计算一个文件夹中的所有子文件夹中的指定类型代码的行数,人为的换行都会被自动忽略不计.
- 操作方法:用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作.
- 代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 //计算代码行数 5 int countAmount(char a[]) 6 { 7 int i,sum = 0; 8 9 for(i = 0; a[i]; i++) 10 { 11 12 int flag = 0; 13 //查找这个回车符与上一个回车符之间是否存在内容 14 if (a[i] == 10) { 15 16 for(int j = i - 1; j > 0 && a[j] != 10; j--) { 17 18 if (a[j] != ‘ ‘ && a[j] != 13) { 19 flag = 1; 20 break; 21 } 22 } 23 } 24 if (flag) { 25 sum++; 26 } 27 } 28 //如果最后一行没有换行则加1 29 if (a[i-1] != 10) { 30 sum++; 31 } 32 return sum; 33 } 34 int main() 35 { 36 /**要执行的find命令*/ 37 char command[5000]; 38 /**需要合并代码的文件夹路径*/ 39 char folderPath[5000]; 40 /**文件后缀名*/ 41 char suffix[20]; 42 /**存放所有搜索到的文件路径的临时文件,在这个文件中每个路径单独占一行,最后这个文件会被删除*/ 43 char tempFile[5000]; 44 /**临时文件的指针*/ 45 FILE *fTempFile; 46 /**单个文件路径*/ 47 char singleFile[5000]; 48 /**单个文件的指针*/ 49 FILE *fSingleFile; 50 /**存放单个文件中的所有内容*/ 51 char singleFileContent[1000000]; 52 /**单个文件代码数量*/ 53 int singleFileAmount; 54 /**所有文件代码总量*/ 55 int allFileAmount; 56 /**文件的数量*/ 57 int fileNum; 58 char ch,ch2; 59 int i,flag; 60 while(1) 61 { 62 printf("请拖入文件夹路径:"); 63 scanf("%s",folderPath); 64 printf("请输入要合并文件的后缀(如.c,.txt):"); 65 scanf("%s",suffix); 66 //生成不完整的find命令 67 strcpy(command,"find "); 68 strcat(command,folderPath); 69 strcat(command," -name *"); 70 strcat(command,suffix); 71 strcat(command,">>"); 72 //生成临时文件的全路径 73 strcpy(tempFile,folderPath); 74 strcat(tempFile,"/temp.txt"); 75 //生成完整的find命令 76 strcat(command,tempFile); 77 //执行Unix下的find命令,将搜索到的内容输出到temp.txt文件中 78 system(command); 79 fTempFile = fopen(tempFile,"r"); 80 fileNum = 0; 81 allFileAmount = 0; 82 while(1) 83 { 84 i=-1; 85 //每次得到一个文件的全路径 86 while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF); 87 88 if(singleFile[i]==EOF) 89 { 90 break; 91 } 92 singleFile[i]=0;//文件内容结尾标志 93 singleFileAmount = 0; 94 ch2 = 0; 95 fSingleFile=fopen(singleFile,"r");//打开文件 96 i=0; 97 while((ch=fgetc(fSingleFile))!=EOF) 98 { 99 singleFileContent[i++] = ch; 100 } 101 singleFileContent[i] = 0; 102 singleFileAmount = countAmount(singleFileContent); 103 fileNum++; 104 printf("%d:%d行 %s\\n",fileNum,singleFileAmount,singleFile); 105 allFileAmount += singleFileAmount; 106 fclose(fSingleFile); 107 } 108 fclose(fTempFile); 109 //生成删除临时文件的命令 110 strcpy(singleFile,"rm "); 111 strcat(singleFile,tempFile); 112 system(singleFile);//删除临时文件 113 printf("\\n\\n此文件夹下:\\n\\n"); 114 printf("共计%d个.c文件\\n\\n",fileNum); 115 printf("共计代码:%d行\\n\\n",allFileAmount); 116 117 118 } 119 return 0; 120 }
结果:
以上是关于代码计算神器的主要内容,如果未能解决你的问题,请参考以下文章
Python之深入解析一行代码计算每个省面积的神器Geopandas