c/c++行计算工具

这些天看ruby,写了个c/c++的行计算工具当练习用,目前不支持子目录的计算
用法:
ruby source.rb filename or dirname
支持的文件格式:h/hpp/c/cpp/cxx
def writelogfile(file,logstr)
    file.write(logstr)
    file.write("/n")
end


unless ARGV.size == 1 and (test(?e, ARGV[0]) or test(?d,ARGV[0]))
  puts "Usage:  #{File.basename($PROGRAM_NAME)} filename.cpp"
  exit
end

alltotallines = 0
allreallines = 0
allremarklines = 0
realcode=String.new
filename_array=Array.new
outputstr = String.new
logfilename=File.basename(ARGV[0])+"_log"
logfile = File.new(logfilename, File::CREAT|File::TRUNC|File::RDWR, 0644)

if test(?d, ARGV[0]) then
    Dir.chdir(ARGV[0])
    filename_array=Dir["*.{cpp,cxx,c,h,hpp}"]
elsif test(?e, ARGV[0]) then
    filename_array << ARGV[0]
else
    exit
end
outputstr  = "%-20s%-15s%-15s%-15s" % ["Filename","TotalLines","RealCodeLines","RemarkLines"]
puts outputstr
writelogfile(logfile,outputstr)
   
filename_array.each  do
    |filename|
    totallines = 0
    reallines = 0
    remarklines = 0
    srcdata =File.read(filename)
    #puts srcdata
   
    realcode=srcdata.gsub(*((.|/n)*?)/*///,"")
  #logfile.write(realcode)
    realcode.gsub!(/.*/,"")
   
    realcode.gsub!(//n[ |/s]*/n/,"/n")            #delete emptry line
    realcode.strip!
    #puts realcode
   
    #logfile.write(realcode)
    logfile.write("/n")
   
    srcdata.each_line do
        totallines+=1
    end
    realcode.each_line do
        reallines+=1
    end
    remarklines=totallines-reallines
   
    outputstr  = "%-20s%-15d%-15d%-15d" % [filename,totallines,reallines,remarklines]
    puts outputstr
    writelogfile(logfile,outputstr)
   
    alltotallines += totallines
    allreallines += reallines
    allremarklines += remarklines
end


outputstr  = "%-20s%-20s%-20s" % ["All total codes","All real codes","All remark codes"]
puts outputstr
writelogfile(logfile,outputstr)

outputstr  = "%-20d%-20d%-20d" % [alltotallines,allreallines,allremarklines]
puts outputstr
writelogfile(logfile,outputstr)

logfile.close
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值