Linux | 代码统计工具SLOCCount
来源:互联网 发布:linux 关闭swap 编辑:程序博客网 时间:2024/05/21 11:45
- SLOCCount
- Ubuntu1404下安装
- 使用
- 主要参数
- 支持语言
- 转换成html文件
- html格式呈现
- 参考
SLOCCount
Linux/Unix下统计代码行数工具
SLOC means “Source Lines of Code”
Ubuntu14.04下安装
终端下键入命令: sudo apt-get install sloccount
使用
主要参数
sloccount [–version] [–cached] [–append] [ –datadir directory ]
[–follow] [–duplicates] [–crossdups] [–autogen] [–multiproject]
[–filecount] [–wide] [–details] [ –effort F E ] [ –schedule F E ] [
–personcost cost ] [ –overhead overhead ] [ –addlang language ] [
–addlangall ] [–] directories
–cached
跳过计算过程,直接使用上次结果
–multiproject
如果该文件夹包括一系列的子文件夹,而它们中的每一个都是相对独立开发的不同的项目,那么使用”–multiproject”选项,评估将会正确的考虑到这一点。
–filecount
显示文件数目而非代码行数
–details
显示每个源文件的详细信息
–duplicates
算上所有重复的(默认情况下如果文件有相同的内容,则只算一个)
–crossdups
如果顶目录包含几个不同的项目,并且你想把不同的项目下重复的文件在每个项目中都算上一次,则使用该选项。
支持语言
Ada (.ada, .ads, .adb)
Assembly (.s, .S, .asm)
awk (.awk)
Bourne shell and variants (.sh)
C (.c)
C++ (.C, .cpp, .cxx, .cc)
C shell (.csh)
COBOL (.cob, .cbl) as of version 2.10
C# (.cs) as of version 2.11
Expect (.exp)
Fortran (.f)
Haskell (.hs) as of version 2.11
Java (.java)
lex/flex (.l)
LISP/Scheme (.el, .scm, .lsp, .jl)
Makefile (makefile) - not normally shown.
Modula-3 (.m3, .i3) as of version 2.07
Objective-C (.m)
Pascal (.p, .pas)
Perl (.pl, .pm, .perl)
PHP (.php, .php[3456], .inc) as of version 2.05
Python (.py)
Ruby (.rb) as of version 2.09
sed (.sed)
SQL (.sql) - not normally shown.
TCL (.tcl, .tk, .itk)
Yacc/Bison (.y)
转换成html文件
官网上给出了sloc2html.py 源文件,但有几处小bug。
下面是修正后的文件,并添加了部分注释。
若文件名带空格,会报错。
#!/usr/bin/env python# Written by Rasmus Toftdahl Olesen <rto@pohldata.dk># Modified slightly by David A. Wheeler# Released under the GNU General Public License v. 2 or higherfrom string import *import sysNAME = "sloc2html"VERSION = "0.0.2"# use sys.argv to attain argument of system.# sys.argv[0] means the path of this code.if len(sys.argv) != 2: print "Usage:" print "\t" + sys.argv[0] + " <sloc output file>" print "\nThe output of sloccount should be with --wide and --multiproject formatting" sys.exit()# dict()colors = { "python" : "blue", "ansic" : "yellow", "perl" : "purple", "cpp" : "green", "sh" : "red", "yacc" : "brown", "lex" : "silver", # Feel free to make more specific colors. "ruby" : "maroon", "cs" : "gray", "java" : "navy", "ada" : "olive", "lisp" : "fuchsia", "objc" : "purple", "fortran" : "purple", "cobol" : "purple", "pascal" : "purple", "asm" : "purple", "csh" : "purple", "tcl" : "purple", "exp" : "purple", "awk" : "purple", "sed" : "purple", "makefile" : "purple", "sql" : "purple", "php" : "purple", "modula3" : "purple", "ml" : "purple", "haskell" : "purple" }print "<html>"print "<head>"print "<title>Counted Source Lines of Code (SLOC)</title>"print "</head>"print "<body>"print "<h1>Counted Source Lines of Code</h1>"# open result.txtfile = open ( sys.argv[1], "r" )print "<h2>Projects</h2>"line = ""# read one line and move to next line until find out the stringwhile line != "SLOC\tDirectory\tSLOC-by-Language (Sorted)\n": line = file.readline()print "<table>"print "<tr><th>Lines</th><th>Project</th><th>Language distribution</th></tr>"line = file.readline()while line != "\n": num, project, langs = split ( line ) print "<tr><td>" + num + "</td><td>" + project + "</td><td>" print "<table width=\"500\"><tr>" for lang in split ( langs, "," ): if langs == '(none)' or lang =='(none)': break l, n = split ( lang, "=" ) print "<td bgcolor=\"" + colors[l] + "\" width=\"" + str( float(n) / float(num) * 500 ) + "\">" + l + "=" + n + " (" + str(int(float(n) / float(num) * 100)) + "%)</td>" print "</tr></table>" print "</td></tr>" line = file.readline()print "</table>"print "<h2>Languages</h2>"while line != "Totals grouped by language (dominant language first):\n": line = file.readline()print "<table>"print "<tr><th>Language</th><th>Lines</th></tr>"line = file.readline()while line != "\n": lang, lines, per = split ( line ) lang = lang[:-1] # exclude the last character print "<tr><td bgcolor=\"" + colors[lang] + "\">" + lang + "</td><td>" + lines + " " + per + "</td></tr>" line = file.readline()print "</table>"print "<h2>Totals</h2>"while line == "\n": line = file.readline()print "<table>"print "<tr><td>Total Physical Lines of Code (SLOC):</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"line = file.readline()print "<tr><td>Estimated development effort:</td><td>" + strip(split(line,"=")[1]) + " person-years (person-months)</td></tr>"line = file.readline()line = file.readline()print "<tr><td>Schedule estimate:</td><td>" + strip(split(line,"=")[1]) + " years (months)</td></tr>"line = file.readline()line = file.readline()print "<tr><td>Total estimated cost to develop:</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"print "</table>"file.close()print "Please credit this data as \"generated using 'SLOCCount' by David A. Wheeler.\"\n"print "</body>"print "</html>"
html格式呈现
把生成的结果转换为带图形统计结果的html文件。 缺点是对中文支持不好。
具体操作:
1. 将上述代码保存为sloc2html.py文件,放在需要统计的工程目录下
2. 在终端进入需要统计的工程目录,键入以下命令: sloccount --wide --multiproject . > result.txt
将统计结果保存至result.txt文件中
3. 将文本结果转化为html文件: python sloc2html.py reslut.txt > result.html
4. 用浏览器打开
参考
【Linux】代码统计工具sloccount
官网
- Linux | 代码统计工具SLOCCount
- sloccount 代码统计工具
- Linux下的代码统计工具--sloccount
- Linux下源代码行数统计工具(sloccount, cloc等)
- Linux shell代码统计工具
- 代码行数统计工具
- java代码统计工具
- 代码统计工具
- 代码统计工具
- java代码统计工具
- 代码行统计工具
- 代码统计工具cloc
- 代码行数统计工具
- 代码统计工具statsvn
- java代码统计工具
- 代码统计工具
- php代码统计工具
- 代码行数统计工具
- POJ 1741Tree 树分治 dp
- 压缩感知和稀疏信号处理课程笔记(陆吾生)
- 11536 Smallest Sub-Array(入门级TwoPoint)
- Android基础:Camera
- phpexcle在thinkphp3.2.3下的导入导出数据
- Linux | 代码统计工具SLOCCount
- The content of element type "session-factory" must match "(property*,mapping*,(class-cache|collectio
- 如何去除JQuery Mobile中的默认input样式(转)
- Node.js + MongoDB + AngularJS - 5 在Node.js中处理数据I0-1
- 真机调试错误 3819
- 【php与html与css】在html能显示css的内容,在php不行
- url 中文传参 乱码问题(最近使用volley出现问题进行总结)
- JAVA网络爬虫 实现爬取百度百家数据示例
- STM32中开漏(open-drain,漏极开路)和推挽(push-pull)以及float input分析