NCC Tools(never code counter tools) V1.0.1发布代码-代码统计工具
界面如下图:把源代码存为(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>