首页 > 编程 > HTML > 正文

NCC Tools(never code counter tools) V1.0.1发布代码-代码统计工具

2020-01-25 19:40:56
字体:
来源:转载
供稿:网友
界面如下图:把源代码存为(hta)文件,因为hta文件没有状态栏,所以我这里建议大家存为html文件,这样可以在状态栏下看到 

NCC扫描的进度,我这里把NCC的maxloop设置为3000,所以文件统计到3000的时候,会自动终止,以防文件夹中文件太多造成运行的负担。 

如果大家喜欢这样的代码,就请关注"Never Modules" 

主要功能有- 
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="type your file or folder path" size="30"> 
 <input class="btn" type="button" value=" FILE " onclick="selectSingleFile('filepathStr')"/> 
 <input class="btn" type="button" value="FOLDER" onclick="selectFolder('filepathStr')"/> 
 </li> 
 <li> 
 <input name="groupfileExt" value="asp" type="checkbox" checked onclick="changeFileExt()"/> 
 .asp 
 <input name="groupfileExt" value="js" type="checkbox" checked onclick="changeFileExt()"/> 
 .js 
 <input name="groupfileExt" value="xml" type="checkbox" checked onclick="changeFileExt()"/> 
 .xml 
 <input name="groupfileExt" value="aspx" type="checkbox" checked onclick="changeFileExt()"/> 
 .aspx 
 <input name="groupfileExt" value="cs" type="checkbox" checked onclick="changeFileExt()"/> 
 .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" onclick="output()"/> 
 <!-- not complete <input name="button" type="button" class="btn" onclick="NCC.format();" value="Format Code"/> --> 
 </li> 
 <li> 
 <input class="btn two" type="button" value="Information Save As" onclick="saveAs();"/> 
 </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>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表