用Javascript操作硬盘文件
有一个日志文件格式是这样的4129,23|4074,25|4011,16|……每组以|分隔,前者是更新的模板ID,后者是该模板被关联的频道,需要统计模板的关联频道数并排序。
输入:
4129,23|4074,25|4011,16|……
输出:
模板ID 关联频道数
3261 871
523 824
2039 811
……
html代码
- <form>
- <input type="file" size="30" id="filePath" />
- <input type="button" value="分析" id="analyze" />
- </form>
javascript处理代码
- function $(el){ return document.getElementById(el);}
- var analyze = function(){
- this.analyze = 'analyze';
- this.filePath = 'filePath';
- this.readFlag = 1;
- this.writeFlag = 2;
- //匹配数据组的正则表达式
- this.regPattern = /^(\d+),(\d+)$/;
- this.cache = {result:{},array:[]};
- this.fso = new ActiveXObject("Scripting.FileSystemObject");
- };
- analyze.prototype = {
- start:function(){
- var _filePath = $(this.filePath).value;
- var pairArray = this.read(_filePath).split('|'),pair = null;
- for(var i = 0 ; i < pairArray.length ; i++){
- //如果正则表达式匹配成功
- //则pair[0]为全匹配,pair[1]为第一个子匹配,pair[2]为第二个子匹配
- pair = pairArray[i].match(this.regPattern);
- if(pair){
- if(this.cache.result[pair[1]] != undefined && this.cache.result[pair[1]] != null)
- this.cache.result[pair[1]]++;
- else
- this.cache.result[pair[1]] = 1;
- }
- }
- //从result拷贝到array,方便快速排序
- for(var i in this.cache.result){
- this.cache.array.push({templateId:i,channelCount:this.cache.result[i]});
- }
- this.cache.array = this.quickSort(this.cache.array);
- this.write(this.quickSort(this.cache.array),_filePath.replace('.txt','')+'_statistics.txt');
- alert('done!');
- },
- read:function(filePath){
- var _file = this.fso.OpenTextFile(filePath, this.readFlag);
- var _string = _file.ReadAll();
- _file.close();
- return _string;
- },
- write:function(array,filePath){
- var _file = this.fso.OpenTextFile(filePath, this.writeFlag,true);
- _file.WriteLine('模板ID 关联频道数');
- for(var i in array){
- _file.WriteLine(this.digitFix(array[i]['templateId'],4)+' '+ this.digitFix(array[i]['channelCount'],4));
- }
- _file.close();
- },
- quickSort:function(array,left,right){
- if(left == null && right == null){ left = 0; right = array.length-1;}
- var swap = function(i,j){
- if(i==j) return;
- var temp = _array[i];
- _array[i] = _array[j];
- _array[j] = temp;
- }
- var i, last,_array = array;
- if (left >= right) return _array;
- last = left;
- for (i = left + 1; i <= right;i++ ){
- if(this.compare(_array[i], _array[left]))
- swap(++last,i);
- }
- swap(left,last);
- this.quickSort(_array,left,last-1);
- this.quickSort(_array,last+1,right);
- return _array;
- },
- compare:function(x,y){
- return x['channelCount'] > y['channelCount'];
- },
- digitFix:function(number,count){
- var _string = number + '';
- var _count = count-_string.length;
- for(var i = 0; i < _count; i++)
- _string = ' ' + _string;
- return _string;
- },
- bind:function(el,type,fn,range,params){
- var _params = params == null || params.constructor != Array ? [params] : params;
- if (el.addEventListener)
- el.addEventListener(type,function(){fn.apply(range,_params)}, false);
- else
- el.attachEvent("on"+type, function(){fn.apply(range,_params)});
- },
- init:function(){
- this.bind($(this.analyze),'click',this.start,this);
- }
- };
- var aa = new analyze();
- aa.init();


潘魏增|学海无涯 » 文章归档 » c#版快速排序
January 27, 2008 6:22 pm
[…] 最新发表文章 用Javascript操作硬盘文件简单的Javascript日历减肥参考数据使用豆瓣API显示图书列表Javascript区块编码的一个示例几款网页分析软件介绍大斌训练频道Javascript实现命名空间率土之滨 莫非王臣历史归档 […]