统计
作者的blog: blog.never-online.net
"Never Modules"-NCC(never code counter) tools-代码统计工具V1.01
统计js,asp,aspx,cs,html,xml等
把源代码存为(hta)文件,因为hta文件没有状态栏,所以我这里建议大家存为html文件,这样可以在状态栏下看到NCC扫描的进度,我这里把NCC的maxloop设置为3000,所以文件统计到3000的时候,会自动终止,以防文件夹中文件太多造成运行的负担。
主要功能有:
1、可自己选择文件夹,或者单个文件。
2、自己选择文件后缀名进行统计
3、output information输出的数据有:
文件个数,
文件的代码字节数,
单词个数,
代码行数,
总代码字节数
总代码行数。
4、可以将数据用SaveAs存为html或者txt文件
运行代码框
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title> NCC Tools - http://www.never-online.net </title> <hta:application id="NCC" applicationname="NCC application" border="thin" borderstyle="normal" caption="yes" icon="http://www.never-online.net/images/icon.ico" maximizebutton="no" minimizebutton="yes" showintaskbar="no" singleinstance="yes" sysmenu="yes" version="1.01" windowState="normal"/> <meta http-equiv="ImageToolbar" content="no" /> <meta name="author" content="BlueDestiny, never-online"/> <meta name="keywords" content="never modules, Mozilla CSS, C#, .net, Refercence, BlueDestiny, never-online, www.never-online.net"/> <meta name="description" content="BlueDestiny, never-online"/> <meta name="title" content="never code counter (NCC) - http://www.never-online.net" /> <meta name="creator.name" content="Genius Lau, never-online, blueDestiny" /> <style type="text/css" media="all" title="Default"> body { background-color:buttonface; } body,td,input { font:9pt tahoma; } h1 { text-align:center; font-weight: bold; font-family: tahoma; font-size: 16pt; } fieldset { height:300px; } legend { font-weight: bolder; } .btn { border-left:4px solid #444; border-top:1px solid #444; border-bottom:1px solid #444; border-right:1px solid #444; } .two { width:200px; } .txt { border:1px solid #444; } .file { display:none; width:300px; border-left:4px solid #444; border-top:1px solid #444; border-bottom:1px solid #444; border-right:1px solid #444; } #loading { display:none; filter:alpha(opacity=70); border:1px solid #444444; background-color:appworkspace; color:#ffffff; width:300px; font-size:13px; font-weight:bold; font-family:arial; padding:10px; position:absolute; top:0; left:0; } #left { line-height:200%; width:50%; padding:20px; } #left ul { margin:0 0 0 10px; } #left li { list-style-type: decimal; margin:20px 10px 15px 10px; } #footer { font-size:11px; text-align:center; } #right { padding:20px; width:50%; } #outputWrapper { padding:10px; } </style> <script type="text/javascript"> //<![CDATA[ //====================================================================================== // // Module : NCC - never code counter V1.01 beta // Script by : never-online, blueDestiny // Updated : 2006-6-25 // Copyright : Miracle technology all reserved // Website : http://www.never-online.net // Email : blueDestiny@126.com // Blog : http://blog.csdn.net/blueDestiny, http://blog.never-online.net/ // Comment : Permission given to use this script in ANY kind of applications if // header lines are left unchanged. // //====================================================================================== //==================================================================================== // Ultity Function var doc = document, wnd = window; String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''); }; Array.prototype.push = function(x) { this[this.length] = x; }; Array.prototype.pop = function() { return this[this.length-1]; }; //==================================================================================== var NCC = { // Private Variables _maxloop : 3000, _version : "1.02 beta", _author : "BlueDestiny, never-online", _webURI : "http://www.never-online.net", _lines : {"total":0}, _bytes : {"total":0}, _files : {"total":0}, _words : {"total":0}, _error : {}, _filesExts : "cs,js,asp,xml,aspx", _fsoObj : new ActiveXObject("Scripting.FileSystemObject") // make sure Your fso activeXObject is availd. otherwise can not runing next code }; // Public Functions API NCC.splash = function() { }; NCC.init = function() { var fileDlgObjStr = '<object id="filepathDlg"' +' width="0px" height="0px"' +' classid="CLSID:F9043C85-F6F2-101A-A3C9-08002B2F49FB"' +' codebase="http://activex.microsoft.com/controls/vb5/comdlg32.cab">' +'</object>'; var folderDlgObjStr = '<object id="folderpathDlg"' +' classid="CLSID:13709620-C279-11CE-A49E-444553540000"' +' width="0" height="0">' +'</object>'; var loadingObjStr = '<div id="loading"></div>'; doc.body.insertAdjacentHTML("beforeEnd", fileDlgObjStr); doc.body.insertAdjacentHTML("beforeEnd", folderDlgObjStr); doc.body.insertAdjacentHTML("beforeEnd", loadingObjStr); } NCC.chkFileExts = function(filenameStr) { var a = this._filesExts.trim().split(","); var f = this.getFileExts(filenameStr); for (var i=0; i<a.length; i++) if (f.toLowerCase() == a[i].toLowerCase()) return true; return false; }; NCC.output = function(wrapperID) { var k, x; x=[]; x.push("------------- Files -------------"); // -- part of files -- for (k in this._files) x.push("[" +k+ "]: " +this._files[k]+ ""); // -- part of words -- x.push("------------- Words -------------"); for (k in this._words) x.push("[" +k+ "]: " +this._words[k]+ ""); // -- part of bytes -- x.push("------------- Bytes -------------"); for (k in this._bytes) x.push("[" +k+ "]: " +this._bytes[k]+ ""); // -- part of lines -- x.push("------------- Lines -------------"); for (k in this._lines) x.push("[" +k+ "]: " +this._lines[k]+ ""); x = x.join("\n"); if (wrapperID) { var a = doc.all(wrapperID), t=a.tagName.toLowerCase(); if (!a) return wnd.alert("HTMLElement ID \"" +wrapperID+ "\" is not valid!"); if (t=="input" || t=="textarea") a.value = x; else a.innerHTML = x.replace(/\n/,"<br/>"); } return x; }; NCC.saveAs = function(elIdorStr) { var dlg = doc.all("filepathDlg"); var a = doc.all(elIdorStr); if (a) { var t = a.tagName.toLowerCase(); var fileStr = (t=="input" || t=="textarea") ? a.value : a.innerHTML.replace(/<br(\/)?>/g, "\n"); } else { fileStr = elIdorStr; } dlg.cancelError=true; try { dlg.filter="Text Files (*.txt)|*.txt|HTM Files (*.htm)|*.htm"; dlg.showSave(); var f = this._fsoObj.CreateTextFile(dlg.filename,true); f.write(fileStr); f.Close(); } catch(ex) {}; }; NCC.setFilesExt = function(filesExtsStr) { this._filesExts = filesExtsStr; return true; }; NCC.getFilesExts = function() { return this._filesExts; }; NCC.getFileExts = function(filenameStr) { var a=filenameStr.split("."); return a[a.length-1].toLowerCase();//a.pop() }; NCC.selectSingleFile = function() { var dlg = doc.all("filepathDlg"); var fps = doc.all("filepathStr"); var fes = this._filesExts; var filename="", filter="", arr=[]; arr = fes.trim().split(","); for (var i=0; i<arr.length; i++) filter += arr[i].toUpperCase() +" Files (*." +arr[i]+ ")|*." +arr[i]+ "" +(i==arr.length-1?"":"|"); dlg.cancelError=true; try { dlg.filter = filter; dlg.showOpen(); filename = dlg.filename; } catch(ex) {}; if (filename.trim()=="") return false; fps.value = filename; if (!this.chkFileExts(filename)) return wnd.alert("File Extension name \"" +filename+ "\" is not valid!"); return filename; }; NCC.selectFolder = function() { var dlg = doc.all("folderpathDlg"); try { var pathObj = dlg.browseForFolder(0,"Please Select Folder:",0); var pathStr = pathObj.parentFolder.parseName(pathObj.Title).path; return pathStr; } catch(ex) { return false }; }; NCC.countFolder = function(folderpathStr) { var ldg = doc.all("loading"); with (ldg.style) { display = "block"; top = parseInt((doc.body.clientHeight-ldg.offsetHeight)/2); left = parseInt((doc.body.clientWidth-ldg.offsetWidth)/2); }; ldg.innerHTML = "<div align=\"center\">Now Counting...</div>";wnd.status = "NCC Counting..."; if (!this._fsoObj.FolderExists(folderpathStr)) { this.countSingleFile(folderpathStr); } else { var cnt = 0; function iterator(folderpathStr) { var a = NCC._fsoObj.getFolder(folderpathStr); var e = new Enumerator(a.files) for (; !e.atEnd(); e.moveNext()) {NCC.countSingleFile(e.item());if (cnt++>=NCC._maxloop) return;} var f = new Enumerator(a.subFolders) for (; !f.atEnd(); f.moveNext()) {iterator(f.item());if (cnt++>=NCC._maxloop) return;} } iterator(folderpathStr); } ldg.innerHTML = "<div align=\"center\">NCC Count Completely.</div>" wnd.status = "NCC Count Completely."; wnd.setTimeout(function(){ldg.style.display = "none";},3000); }; NCC.countSingleFile = function(filepathStr) { var x, a, f, e; var ldg = doc.all("loading"); if (!this._fsoObj.FileExists(filepathStr)) return false; f = this._fsoObj.GetFile(filepathStr); if (this.chkFileExts(f.name)){var o = f.openAsTextStream(1);if (o.atEndOfStream) { x = ""; } else { x = o.ReadAll(); }x = x.replace(/(\n|\r)+/mg,"$1");a = x.split("\n");e = this.getFileExts(f.name);this._bytes["total"] += x.length;this._bytes[e] ? this._bytes[e]+=x.length : this._bytes[e]=x.length;this._lines["total"] += a.length;this._lines[e] ? this._lines[e]+=a.length : this._lines[e]=a.length;a = x.replace(/(\s|\t| )+/g," ").split(" ");this._words["total"] += a.length;this._words[e] ? this._words[e]+=a.length : this._words[e]=a.length;this._files["total"] ++;this._files[e] ? this._files[e]++ : this._files[e]=1;} wnd.status = "NCC(\"" +f.path+ "\")"; ldg.innerHTML = "now count \"" +f.name+ "\"."return this.chkFileExts(f.name) }; NCC.formatSingleFile = function(filepathStr) { }; //==================================================================================== function window.onload() { NCC.init(); wnd.resizeTo(800,480);doc.all("outputWrapper").value = ""; setFilesExts();//setFilesExts.call(this); } function setFilesExts() { doc.all("filesExts").value = NCC.getFilesExts(); } function output() { /* var e = event.srcElement; var a = doc.body.all; for (var i=0; i<a.length; i++) { if (a[i].tagName.toLowerCase()=="input") { if (a[i]!=e) a[i].disabled=true; } } */NCC.setFilesExt(doc.all("filesExts").value) NCC.countFolder(doc.all('filepathStr').value); NCC.output('outputWrapper'); } function changeFileExt() { var groupfileExts = doc.all("groupfileExt"); var fileExtStr = []; for (var i=0; i<groupfileExts.length; i++) { if (groupfileExts[i].checked) fileExtStr.push(groupfileExts[i].value); } NCC.setFilesExt(fileExtStr.join(",")); setFilesExts(); } function selectSingleFile(val) { if (!NCC.selectSingleFile()) return ""; doc.all(val).value = NCC.selectSingleFile(); } function selectFolder(val) { var a = NCC.selectFolder(); if (a==false) return ""; doc.all(val).value = a; } function saveAs() { NCC.saveAs('outputWrapper'); //NCC.saveAs(NCC.output()); } //]]> </script></head><body id="www.never-online.net"> <h1> NCC (never code counter) tools - http://www.never-online.net </h1> <fieldset> <legend> - Application NCC (never code counter) -</legend> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td align="left" valign="top" id="left"> <ul> <li> <input name="filepathStr" type="text" class="txt" value="E:\__works\__website" size="30"> <input class="btn" type="button" value=" FILE " /> <input class="btn" type="button" value="FOLDER" /> </li> <li> <input name="groupfileExt" value="asp" type="checkbox" checked /> .asp <input name="groupfileExt" value="js" type="checkbox" checked /> .js <input name="groupfileExt" value="xml" type="checkbox" checked /> .xml <input name="groupfileExt" value="aspx" type="checkbox" checked /> .aspx <input name="groupfileExt" value="cs" type="checkbox" checked /> .cs <br/> <input name="filesExts" type="text" class="txt" id="filesExts" value="" size="40"> </li> <li> <input class="btn two" type="button" value="Output Information" /> <!-- not complete <input name="button" type="button" class="btn" value="Format Code"/> --> </li> <li> <input class="btn two" type="button" value="Information Save As" /> </li> </ul> <div id="footer"> <p> NCC V1.01 beta Power By BlueDestiny, never-online <br/> More code please visit <a href="http://www.never-online.net" target="_blank" title="visit my site">http://www.never-online.net</a> </p> </div> </td> <td align="left" valign="top" id="right"> <fieldset> <legend>- Output Information -</legend> <textarea id="outputWrapper" style="border:0; background-color:buttonface; width:96%; height:100%;"></textarea> </fieldset> </td> </tr> </table> </fieldset></body></html>
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]