// 功能:格式化runlog中各个线程的统计项
// 使用方法,输入所要提取统计项的一个关键词,或多个关键词对应值求和
// 正则无记忆方法
var fso = new ActiveXObject("Scripting.FileSystemObject");
var strSrcSplitter = "|"
var strSplitter = "\t";
var WshShell = new ActiveXObject("WScript.Shell");
var g_ScriptName;
var g_ScriptContainFolder;
var g_TmpFolder;
function Output(str)
{
WScript.StdOut.WriteLine(str);
}
RegExp.prototype.TestNoRecord = function(str){
var ret = this.test(str);
this.lastIndex = 0;
return ret;
}
RegExp.prototype.ExecNoRecord = function(str){
var ret = this.exec(str);
this.lastIndex = 0;
return ret;
}
// 数组排重插入方法
Array.prototype.Insert = function(val)
{
for(var i = 0; i < this.length; ++i)
{
if(this[i] == val)
{
return false;
}
}
this.push(val);
return true;
}
function IsBigger(val1, val2)
{
var bIsVal1Number = !isNaN(val1);
var bIsVal2Number = !isNaN(val2);
if(bIsVal1Number)
{
if(bIsVal2Number)
{
return (parseInt(val1) > parseInt(val2));
}
else
{
return false;
}
}
else
{
if(bIsVal2Number)
{
return true;
}
else
{
return (val1 > val2);
}
}
}
Array.prototype.Sort = function()
{
for(var i = 0; i < (this.length - 1); ++i)
{
var bSorted = false;
for(var j = 0; j < (this.length - i - 1); ++j)
{
if(IsBigger(this[j], this[j + 1]))
{
tmp = this[j];
this[j] = this[j+1];
this[j+1] = tmp;
bSorted = true;
}
}
if(!bSorted)
{
break;
}
}
}
function GetTmpFolder()
{
var objRet;
var tmpFolder = fso.GetSpecialFolder(2);
// 遍历文件夹
var foldersK = new Enumerator(tmpFolder.SubFolders);
if(!fso.FolderExists(tmpFolder.Path + "\\" + g_ScriptName))
{
tmpFolder.SubFolders.Add(g_ScriptName);
}
objRet = fso.GetFolder(tmpFolder.Path + "\\" + g_ScriptName);
return objRet;
}
function ExistFileOrFolder(strPath)
{
if(fso.FileExists(strPath))
{
return true;
}
if(fso.FolderExists(strPath))
{
return true;
}
return false;
}
function ExistInArray(aryValues, value)
{
for(var i = 0; i < aryValues.length; ++i)
{
if(aryValues[i] == value)
{
return true;
}
}
return false;
}
function GetRandomFileName()
{
return ("-" + Math.floor(Math.random() * 999));
}
function OpenResult(strResultPath)
{
strOpenCmd = "\"" + g_ScriptContainFolder.ParentFolder + "\\" + "EmEditor.exe " + "\"" + " /r " + "\"" + strResultPath + "\"";
WshShell.Run(strOpenCmd, 10, true);
var objOutPutFile = fso.GetFile(strResultPath);
objOutPutFile.Delete(true);
}
function GetFirstNo(strWord)
{
var iRet = 0;
if(!isNaN(strWord))
{
iRet = parseInt(strWord);
}
else
{
for(var i = 0; i < strWord.length;)
{
var tmpC = strWord.charAt(i);
if(tmpC >= '0' && tmpC <= '9')
{
iRet = iRet * 10 + (tmpC - '0')
++i;
}
else
{
break;
}
}
}
return iRet;
}
function Proc(strFilePath, strKeys, bOpenResult, strRenameTo, bAnalyse, bRegular)
{
var aryKeys = strKeys.split(" ");
var aryKeyNos = new Array();
for(var i = 0; i < aryKeys.length; )
{
var iKeyNo = GetFirstNo(aryKeys[i]);
if(iKeyNo > 0)
{
aryKeyNos.push(iKeyNo);
++i;
}
else
{
aryKeys.splice(i, 1);
}
}
var aryOutput = new Array();
var tmpOutput;
var tmpColumn;
var objFile = fso.OpenTextFile(strFilePath, 1 , false);
while (!objFile.AtEndOfStream)
{
Parser(objFile.ReadLine());
}
function Parser(strContentLine)
{
if(strContentLine != "")
{
aryOutput.push(strContentLine.split(strSrcSplitter));
}
}
var objResultFolder;
if(bOpenResult)
{
objResultFolder = g_TmpFolder;
}
else
{
objResultFolder = fso.GetFile(strFilePath).ParentFolder;
}
var strFileName = fso.GetFile(strFilePath).Name;
if(strRenameTo == "")
{
strRenameTo = strKeys.replace(/[\(\)\-\:\|]/gm, " ");
}
var iFileNameNo = 0;
var strWriteToPath = "";
do
{
var strSubFileName = strFileName + "_" + strRenameTo;
if(iFileNameNo > 0)
{
strSubFileName += "_" + iFileNameNo;
}
strSubFileName += ".tsv";
strWriteToPath = objResultFolder.Path + "\\" + strSubFileName;
++iFileNameNo;
} while(ExistFileOrFolder(strWriteToPath))
var objOutPutTextStream = fso.OpenTextFile(strWriteToPath, 2 , true);
var strHeader = "";
for(var i = 0; i < aryKeys.length; ++i)
{
strHeader += aryKeys[i] + strSplitter;
}
objOutPutTextStream.WriteLine(strHeader);
for(var i = 0; i < aryOutput.length; ++i)
{
var strLine = "";
var aryLineContents = aryOutput[i];
for(var j = 0; j < aryKeyNos.length; ++j)
{
if(aryKeyNos[j] <= aryLineContents.length)
{
strLine += aryLineContents[aryKeyNos[j] - 1] + strSplitter;
}
}
if(strLine != "")
{
objOutPutTextStream.WriteLine(strLine);
}
}
objOutPutTextStream.Close();
if(bAnalyse)
{
}
if(bOpenResult)
{
OpenResult(strWriteToPath);
}
}
function main()
{
var bExistWScript = false;
try
{
if(WScript)
{
bExistWScript = true;
}
}
catch(e){}
if(!bExistWScript)
{
g_ScriptName = ScriptName;
g_ScriptFullName = ScriptFullName;
}
else
{
g_ScriptName = WScript.ScriptName;
g_ScriptFullName = WScript.ScriptFullName
}
// 全局变量初始化
g_ScriptContainFolder = fso.GetFile(g_ScriptFullName).ParentFolder;
g_TmpFolder = GetTmpFolder();
if(!bExistWScript)
{
var strCmd = "";
var strAnswer = prompt("Items:", "");
if(strAnswer == "")
{
return;
}
strCmd = "cscript /d " + "\"" + ScriptFullName + "\"" + " " + "\"" + document.FullName + "\"" + " " + "\"" + strAnswer + "\"";
var objTmpStream = fso.OpenTextFile(ScriptFullName + ".txt", 8 , true);
objTmpStream.WriteLine(strCmd);
objTmpStream.Close();
//Emeditor无法隐藏exec执行时的窗口。
WshShell.Run(strCmd, 0, true);
return;
}
else
{
if((WScript.Arguments.length >= 1) && (WScript.Arguments(0) != ""))
{
var bOpenResult = true;
var bAnalyse = false;
var bRegular = false;
if(WScript.Arguments.length > 2)
{
var strOptionList = WScript.Arguments(2);
var aryOptions = strOptionList.split("|");
if(ExistInArray(aryOptions, "NotOpen"))
{
bOpenResult = false;
}
if(ExistInArray(aryOptions, "Analyse"))
{
bAnalyse = true;
}
if(ExistInArray(aryOptions, "Regular"))
{
bRegular = true;
}
}
var strRenameTo = "";
if(WScript.Arguments.length >=4)
{
strRenameTo = WScript.Arguments(3);
}
Proc(WScript.Arguments(0), WScript.Arguments(1), bOpenResult, strRenameTo, bAnalyse, bRegular);
return;
}
}
/*if(document.Saved)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objFile = fso.OpenTextFile(document.FullName, 1 , false);
while (!objFile.AtEndOfStream)
{
Parser(objFile.ReadLine());
}
}
else
{
document.selection.SelectAll();
var strContent = document.selection.Text;
document.selection.StartOfLine();
var aryContent = strContent.split("\n");
for(var i = 0; i < aryContent.length; ++i)
{
Parser(aryContent[i]);
}
}*/
}
main();