前言

有的时候有这些需求:

1. 统计一个文件的行数

2. 统计一个源代码的有效行数。排除空行和注释行

3. 统一一个目录下各种文件的数量和行数

要达成这些需求,很多语言多可以做到, 但是使用Perl 应该是一个不错的选择

读取文件行数

读取一个文件的总行数(空行和注释都包含) 使用Perl 很简单

open(FILE ,<>);
my $lines_counter = 0;
while(<>)
{
$lines_counter += 1;
}
print "lines:  $lines_counter\n";  

当然,如果在linux 下就更简单了, 只需要敲入以下命令就可以了:

wc -l filename

源码代码行数(空格数)

统计一个源码文件的代码行数:传入参数: 文件的路径返回: 三个元素的数组; 分别是总行数, 空行行数 和注释行数注意: 这段代码目前基本使用于 Java, C, C++; 因为这里注释部分处理的是以下三种:

1.  // 行注释

2. 块注释

/*

*

*/

3.文件注释

/**

*

*/

完整代码:

#******************************************************************************
# NAME:         get_codeline_count
# DESCRIPTION:  get Files under a Folder
# ARGUMENTS:    1.Folder path
# AUTHOR:       oscar999
#******************************************************************************
sub get_codeline_count{
my ($file_path) = @_;
my $total_lines = 0;
my $blank_lines = 0;
my $comment_lines = 0;
open FILE, $file_path or die "can't open file:$file_path reason=$!";
my $begSegComment = 0;
foreach my $file_line ()
{
$file_line =~ s/\n//g;
$total_lines += 1;
if($begSegComment == 1)
{
$comment_lines += 1;
if($file_line =~ /[\S\s]*\*\/\s*/)
{
$begSegComment = 0;
}
}else{
if($file_line =~ /^\s*$/)
{
$blank_lines += 1;
}elsif($file_line =~ /\s*\/\/[\S\s]*/)
{
$comment_lines += 1;
}elsif($file_line =~ /\s*\/\*/)
{
$comment_lines += 1;
if($file_line =~ /\s*\/\*[\S\s]*\*\/\s*/)
{
}else{
$begSegComment = 1;
}
}
}
}
close FILE;
return ($total_lines, $blank_lines, $comment_lines);
}

源代码行数统计工具 (Perl 版本)

1. Code Line Counter

这个是一个收费的软件,
也有免费版,但有限制, 一次只能统计 10 份文件。

下载地址:

http://codelinecounter.bistonesoft.com/clcperl.htm

下载之后进行安装

运行之后的界面如下:

2. CLOC

这个应该是使用的比较多的工具了。

它可以统计一个路径下各种类型文件的数量, 总的空格,代码,注释的数量。 它也可以统计一个压缩包里面的文件的状况

项目的介绍路径:

http://cloc.sourceforge.net/index.html#Basic_Use

下载路径是:

http://sourceforge.net/projects/cloc/files/cloc/v1.60/

这里提供 Perl 的源码以及打包后的exe 文件。

作为工具来说, 下载 .exe 文件。 目前最新版的文件名是 cloc-1.60.exe

使用方式就是在命令行模式上, 输入:

cloc-1.60.exe  文件路径或者压缩包名

输出的结果类似:

[Perl系列二-实战] 1. Perl 读取代码的行数相关推荐

  1. python一次读取10行_Python怎么读取Excel的行数和列数?

    在把数据写入Excel的过程中遇到了问题,写入的数据是for循环进去的,所以是分多次写入(每次for循环写入一次,一次有几十条数据). 但是在第二次for循环写数据时,就会覆盖掉第一次写的数据,就是后 ...

  2. java读取csv文件行数_java读取巨大csv的行数

    我有超过700K行的巨大csv行数.我必须解析那些csv的行和do ops.我想通过使用线程来做到这一点.我第一次尝试做的很简单.每个线程都应该有唯一的csv行.我只有有限的行数只能读到3000.我创 ...

  3. python统计excel数据总行数_Python怎么读取Excel的行数和列数?

    在把数据写入Excel的过程中遇到了问题,写入的数据是for循环进去的,所以是分多次写入(每次for循环写入一次,一次有几十条数据). 但是在第二次for循环写数据时,就会覆盖掉第一次写的数据,就是后 ...

  4. 浏览文件神器!且可以计算所有文件代码的行数!

    1. [图片] 201312051416305445.jpg ​2. [代码]demo //http://www.codepearl.com header("Content-type: te ...

  5. 怎么在vs2010中显示代码的行数

    从安装VS2010到现在已经有几个月了,每次看到别人的代码能显示行数而自己的不能总感觉不爽,刚百度了一下一共才3步: 1)打开你的VS2010找到  "工具"  里的  " ...

  6. 收藏夹吃灰系列(二):教小师妹通过代码实现Swagger在线接口文档转word文档!教完后...?

    话不多说,工具源码直接分享给大家吧: 如果最后觉得该代码生成器对你有所帮助,请不要吝啬你的赞,直接pia的点亮就完了啦,up up up!!! 如下就是全码,拿走!不谢!!助你趁早解放双手! 本地sw ...

  7. python读取mysql数据库行数_使用python读取mysql数据库并进行数据的操作

    (一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...

  8. gitlab代码查看行数

    1. 下载代码 git clone http://**/scrm/scrm.git 2. 进入下载代码目录下,即需要使用.git文件 cd scrm 3. 切换dev分支 $ git checkout ...

  9. jmeter 循环使用csv数据_如何通过jmeter读取csv文件行数来设置循环控制器的总数...

    1.线程组里添加beanshell取样器 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOExce ...

最新文章

  1. 计算机维护常识_系统篇
  2. redis 2m数据读取_Flink读写Redis(二)读取redis数据
  3. sprintf的使用(和为n的回文数)
  4. rsync error: some files/attrs were not transferred
  5. virtualbox怎么共享文件夹 linux,Virtualbox中Ubuntu设置共享文件夹
  6. C++Primer学习笔记:第2章 变量和基本类型
  7. linux判断内存并释放,linux 内存清理/释放命令
  8. Java元注解作用及使用
  9. 如何从开发小白到音视频专家
  10. 当程序员写不出代码了,该怎么办?
  11. 服务器 上传文件进度,Java动态显示文件上传进度实现代码
  12. 错误调试:Ubuntu-Tensorflow ,程序手动结束后,GPU的显存没有被释放
  13. 转Java 开发环境配置
  14. mysql索引失效的原因
  15. 【目标提取】计算机视觉中如何利用颜色和形状提取目标?
  16. gis连接表格到数据库失败_arcgis连接到数据库失败,常规功能故障
  17. 写bat文件for循环批量创建文件夹
  18. [极客时间]《算法面试通关40讲》
  19. PUMA560MATLAB三维仿真模型,基于Matlab的puma560型机器人仿真
  20. 行为瘫痪(paralysis)、心流和可能的自我

热门文章

  1. 小胖说事30------iOS 强制转成横屏的方式
  2. 设计模式学习笔记(十八:模板方法模式)
  3. H.264的编解码流程
  4. 解决Windows 2003终端服务许可证过期的办法
  5. 推荐系统的变与不变:冷启动、召回排序、长期生态与目标拆解
  6. 2021高值人才职业发展洞察:连接、信任与赋能
  7. pytorch实战从入门到精通第二部分——卷积神经网络
  8. BT下载原理学习简介
  9. NLP预训练家族 | Text-To-Text范式统一NLP任务
  10. java体系的中间件适用于go吗_golang gf框架自定义中间件实现管理界面授权