hta应用—代码统计工具

统计

作者的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 全部选择 提示:你可先修改部分代码,再按运行]

时间: 2024-10-07 05:19:55

hta应用—代码统计工具的相关文章

Python实现代码统计工具(终极篇)_python

本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对比.实测表明,CPLineCounter在统计精度和性能方面均优于其他同类统计工具.以千万行代码为例评测性能,CPLineCounter在Cpython和Pypy环境下运行时,比国外统计工具cloc1.64分别快14.5倍和29倍,比国内SourceCounter3.4分别快1.8倍和3.6倍. 运行测试环境本文基于Windows系统平台,运行和测

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

界面如下图:把源代码存为(hta)文件,因为hta文件没有状态栏,所以我这里建议大家存为html文件,这样可以在状态栏下看到 NCC扫描的进度,我这里把NCC的maxloop设置为3000,所以文件统计到3000的时候,会自动终止,以防文件夹中文件太多造成运行的负担. 如果大家喜欢这样的代码,就请关注"Never Modules" 主要功能有- 1.可自己选择文件夹,或者单个文件. 2.自己选择文件后缀名进行统计 3.output information输出的数据有: 文件个数, 文件

Java正则表达式(三)、代码量统计工具(统计java源文件中注释、代码、空白行数量)

       比如想统计一个Java程序员一天写代码的工作量(如:有效代码多少行.空行多少.注释多少行等),这个小工具也许能做为一个参考的依据.     思路:因为每个java源文件的内容基本包括java语句.空白行.注释三部份组成(不包括注解),所以要统计某个文件这三部份的内容各占多少时,只需写三个匹配这几部份内容的正则表达式即可.然后通过IO流读取文件中的每一行,并根据正则匹配的结果,累加每部份匹配的数量即可.     注释行:单行注释(//).多行注释.文档注释.正则:((//)|(/\\

[小工具]代码统计小工具编写

代码小工具是有一定工作经验并且有更高追求的程序的必备技能,今天加班到早晨五六点,到家都七点了,回到家倒头就睡,下午来公司感觉头还有点晕乎,工作的话怕只会产生更多的代码,就想起来写个工程代码统计工具. 效果图 上图是平时积累的小工具,积累我认识也是程序员必备的素养! 主要代码 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace

Shell脚本实现的基于SVN的代码提交量统计工具

  这篇文章主要介绍了Shell脚本实现的基于SVN的代码提交量统计工具,本文直接给出实现脚本代码,需要的朋友可以参考下 最近没啥事,就用bash写了一个基于svn的代码统计小工具. 可以指定统计的目录,默认递归统计子目录. 目前还没有屏蔽指定目录的功能.哈 代码比较粗糙.不过先晒出来. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 3

Shell脚本实现的基于SVN的代码提交量统计工具_linux shell

最近没啥事,就用bash写了一个基于svn的代码统计小工具. 可以指定统计的目录,默认递归统计子目录. 目前还没有屏蔽指定目录的功能.哈 代码比较粗糙.不过先晒出来. #!/bin/bash - #""""""""""""""""""""""""""

IBM Rational Application Developer代码覆盖工具入门简介

为您的 Java 程序生成代码覆盖统计数据 简介:代码覆盖率工具是软件测试过程中使用到的一个重要的工具,因为它提供了一个关于程序被测 试用例覆盖程度的观点.本文向您展示了怎样使用 IBM Rational Application Developer 中提供的代码覆盖工具,来为 Java 程序生成测试的覆盖率结果,并提供了关于怎样分析结果以 改进测试的信息. 什么是 Rational Code Coverage 特性? 代码覆盖率是软件测试的一个 重要方面,对于一个构件的总体系统测试来说可能是一个

网站数据统计工具汇总

网站流量统计分析,是指在获得网站访问量基本数据的情况下,对有关数据进行统计.分析,以便了解网站当前的访问效果和访问用户行为并发现当前网络营销活动中存在的问题,并为进一步修正或重新制定网络营销策略提供依据.下面江苏SEO介绍几种常见的统计分析工具: 1.百度统计: http://tongji.baidu.com  (据称使用百度统计,百度会对你的网站更友好) 申请百度统计步骤:第一步,注册成为百度联盟会员;第二步,登录联盟系统,在VIP俱乐部频道中申请百度统计测试服务; 第三步,用百度联盟ID登录

第三方网站流量统计工具

流量统计作为互联网站点最基础的数据分析工具,几乎与每个站长.互联网从业者相关.在互联网这个没有硝烟的战场上,流量统计工具就像打仗用的武器.能否选好适合自己的武器.用好武器,很大程度上决定了我们的胜败. 今天我们就来说说百度在今年新推出的免费流量统计工具:百度统计,与之对比的是统计工具:CNZZ(含全景统计和广告统计).今天我们来横向测评下这两款武器. 一.基本的统计数据指标 数据指标是一切数据的基础,反映了流量分析的广度: CNZZ各个报告的指标,如下: 1.时段分析:PV,独立访客,IP,人均