为了统计代码行数(lines of code, LoC),最简单的思路是用python读取每个所输入的代码文件的行数,然后加起来。
本实现分离了代码文件识别和统计,代码文件由用户给出。
1. 实现:
Python实现,用enumerate
函数统计可以防止内存占用过大的问题,我们要的只是一个计数,每行读完扔掉即可(pass
)。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/usr/bin/env python import sys def file_len(fname): with open(fname) as f: for i, l in enumerate(f): pass return i + 1 file_n = len(sys.argv) - 1 print file_n, "files:" sum_line = 0 for i in range(file_n): this_line = file_len(sys.argv[i + 1]) sum_line += this_line print this_line, "\tLoC\t", sys.argv[i + 1] print "total LoC:", sum_line |
2. 用例:
- 例1:直接指定了代码文件
1 2 3 4 5 |
$ ./loc.py src/dedup.c 1 files: 139 LoC src/dedup.c total LoC: 139 |
- 例2:利用了
ls
命令的文件名匹配找到所有src文件夹下的.h和.c文件,然后以管道结合xargs
命令将这些源码文件以参数的形式输入我们的脚本loc.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ ls src/*.c src/*.h | xargs ./loc.py 10 files: 378 LoC src/bloom.h 69 LoC src/chunk_dedup.h 26 LoC src/chunking.h 139 LoC src/dedup.c 66 LoC src/define.h 56 LoC src/hash-table.h 48 LoC src/rabin-hash.h 424 LoC src/sha1.h 65 LoC src/utils.c 41 LoC src/utils.h total LoC: 1312 |