微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题如何统计程序的行数
栏目软件世界
作者维生素
发布2001年30期
  我们知道,一个软件的大小通常是用软件有多少行源代码来衡量的。我们经常听到这样的软件宣传广告:XXX程序员用X年时间开发完成,共有XXX行代码。那么,你想不想知道自己辛辛苦苦写的程序到底有多少行代码呢?
  不过好像VB、Delphi、VC等这些语言中都没有提供让我们统计程序行数的功能。怎么办呢?不用急,身为程序员,当然用编程来实现了。现在,就跟我来用VB实现统计程序行数的功能(用其他语言实现的原理是一样的)。
  大家都知道吧,VB的源代码(窗体代码、模块代码等)都是以文本形式保存的。窗体代码放在扩展名为“.frm”的文件里,模块代码放在扩展名为“.bas”的文件里,类模块代码放在扩展名为“.cls”的文件里。既然是文本文件,统计行数就是很容易的事了。很多朋友肯定想到了用判断文件中有多少回车符的方法来实现。我一开始也是马上就想到这里,不过,实际上有更好的方法啦——用Line Input语句!下面就来具体讲一讲在VB中实现此功能的算法思想及源代码。
   算法思想:
  查找软件设计目录下的所有扩展名为frm、bas、cls的文件,一旦找到就打开它并获得其行数。
   源程序:
  新建一个窗体(可以不放任何控件),在窗体的Mouse_Click事件中放入下列代码(为什么要放在Mouse_Click事件里而不放在Load事件里,看完下面的源程序后你就明白了):
  Option Explicit
  Public Sub Form_Click()
  Dim strAppPath As String '程序运行时的路径
  Dim lngFileLines As Long '文件行数
  Dim lngTotalLines As Long '总行数
  Dim blnBeginCount As Boolean '是否开始统计行数
  Dim strTemp As String '临时变量
  Me.Cls '清除上一次运行时窗体生成的图形和文本
  '获取程序运行时的路径
  strAppPath = App.path
  If Right(strAppPath,1) <> “\” Then strAppPath = strAppPath & “\”
  Dim fs,fd,f '文件系统变量,具体说明请查阅MSDN相关章节
  '关于CreateObject函数和FileSystemObject对象的具体说明请查阅MSDN相关章节
  Set fs = CreateObject(“Scripting.FileSystemObject”)
  Set fd = fs.GetFolder(strAppPath)
  For Each f In fd.Files
  strTemp = Right(UCase(f.Name), 3)'比较文件名时,必须将f.Name的内容转换成大写,否则会被视为不相同文件
  If strTemp = “FRM” Or strTemp = “BAS” Or strTemp = “CLS” Then
  '这里只统计了三种文件的行数
  Open strAppPath & f.Name For Input As    '打开文件
  blnBeginCount = False '一定要设初值
  lngFileLines = 0 '同上
  Do While Not EOF(1)
  Line Input   ,strTemp '使用Line Input语句的目的就是为了一行行的读数据
  If Left(strTemp,15) = “Option Explicit” Then blnBeginCount = True
  If blnBeginCount = True Then lngFileLines = lngFileLines + 1
  '这里做这两个判断的原因是文件中有很多代码是VB自动完成的(用记事本打开就知道了),我们自己写的代码一般是从“Option Explicit”开始
  Loop
  Close   
  lngTotalLines = lngTotalLines + lngFileLines
  Print f.Name & “的代码行数:” & lngFileLines
  '因为使用的是Print语句,所以这些代码不能放在窗体的Load事件中
  End If
  Next
  Print “总代码行数:” & lngTotalLines
  '因为使用的是Print语句,所以这些代码不能放在窗体的Load事件中
  End Sub
  以上程序在Windows Me+VB6调试通过,所附

片为我用本程序统计时的截图。