js|統計
計算當前檔案夾中,有多少行JS代碼和ASP代碼,並且還可統計代碼有多少位元組
有範例程式碼
<%
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'\\
'\\ from codeproject.com
'\\ calculate code
'\\ bluedestiny
'\\ mail:bluedestiny at 126.com
'\\
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
option explicit
response.buffer=false
class COUNT_CODE
private fso,spath
private asplines, jslines, aspbytes, jsbytes, aspwords
private sub class_initialize
'建構函式,建立一個fso執行個體
set fso = createobject("scripting.filesystemobject")
end sub
private sub class_terminate
set fso=nothing
end sub
private function iterate(path)
dim folder, folders, files, file, ts, txt, arr, f
set folder = fso.getfolder(path)
set files = folder.files
dim rx, c
'建立Regex,
'事實上,不應該寫在這裡,應該寫在建構函式裡(包括所用到的變體都應該放在建構函式裡),
'因為這裡用的是遞迴,每次調用自身都重建立立正則執行個體,肯定降低了效率。在遞迴中盡量少的初始化值
'改我就不改了,有興趣的話,用得著的朋友改改吧
set rx = new regexp
rx.ignorecase = true
rx.global = true
rx.pattern = " +"
'遞迴當前檔案夾的檔案。包括js和asp
for each file in files
if right(file.name,4)=".asp" or right(file.name,3)=".js" then
set ts = file.openastextstream
if ts.atendofstream then txt = "" else txt = ts.readall
ts.close
txt = rx.replace(txt," ")
txt = replace(txt,vbcrlf&vbcrlf,vbcrlf)
arr = split(replace(txt,vbcrlf," ")," ")
aspwords = aspwords + ubound(arr)
arr = split(txt,vbcrlf)
if right(file.name,4)=".asp" then
asplines = asplines + ubound(arr)
aspbytes = aspbytes + len(txt)
else
jslines = jslines + ubound(arr)
jsbytes = jsbytes + len(txt)
end if
end if
next
'遞迴當前檔案夾的所有子檔案夾。
set folders = folder.subfolders
for each f in folders
iterate f.path
next
end function
public property let path(s)
spath=server.mappath(s)
end property
public sub count
iterate(spath)
end sub
public sub printf
response.write "ASP:" & "<br/>"
response.write "Total Lines Coded: " & asplines & "<br/>"
response.write "Total Bytes: " & aspbytes & "" & "<br/>"
response.write "Total Individual Elements (words) Typed: " & aspwords & "<br/>"
response.write "JScript:" & "<br/>"
response.write "Total Lines Coded: " & jslines & "<br/>"
response.write "Total Bytes: " & jsbytes
end sub
end class
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'\\範例程式碼
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
dim o
set o=new COUNT_CODE
o.path="bluedestiny/"
o.count
o.printf
%>