这些天看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
用法:
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