<html>
<head>
<style>
body, table {
font-size: 10pt;
}
textarea {
width:100%;
border:1 solid #6699cc;
}
.button_2char {width:60px;}
.button_4char {width:80px;}
</style>
<title>命令提取工具</title>
<script type="text/javascript">
function setWindowSize(width, height){
width = width || 1024;
height = height || 768;
window.moveTo(0, 0);
window.resizeTo(width, height);
}
/*================点击【命令提取】按钮的处理================*/
function fetchCmd(){
var isCheckOk = false;
isCheckOk = doCheck();
if(!isCheckOk){
return;
}
//提取命令
doFetchCmd();
//如果没有提取到任何命令,提示用户设备名是否正确,让用户做修改
remindIfNoCommand();
}
/*================做必要的校验================*/
function doCheck(){
var cmdWidth = document.getElementById("cmdWidth").value;
var sysname = document.getElementById("sysname").value;
if(isEmpty(cmdWidth) || !isInt(cmdWidth)){
alert("行宽必须为整数值!");
return false;
}
if(isEmpty(sysname)){
alert("设备名不能为空!");
return false;
}
return true;
}
/*================执行命令提取处理================*/
function doFetchCmd(){
var cmdWidth = document.getElementById("cmdWidth").value; //行宽
var sysname = document.getElementById("sysname").value; //系统名
var log = document.getElementById("log").value; //命令行日志
//var cmd = document.getElementById("cmd").value;
var logLine = ""; //存放一行日志
var cmds = ""; //最终输出的所有命令
var cmd = ""; //存放提取出来的一行命令
var getNextLine = false; //标志位,是否继续获取下一行,与当前行的命令拼接起来
//命令提示符,如 MA5600T> | MA5600T# | MA5600T(config)# 等等
//var reg = new RegExp(sysname+">|"+sysname+"#|"+sysname+"\\([^\\)]+\\)#", "ig");
//var reg = new RegExp(sysname+">|"+sysname+"#|"+sysname+"\\([^\\)]+\\)(#|%%)", "ig");
var reg = new RegExp(sysname+"(>|#|(\\([^\\)]+\\)(#|%%)))", "ig");
var logArray = log.split("\r\n");
for(var i=0; i<logArray.length; i++){
//以下处理一行日志
logLine = logArray[i];
logLine = logLine.replace(/\s{2,}/g, " "); //把一行内容中两个及以上空格替换为一个空格:此处理主要是去除命令末尾存在过多的空格时,导致提取命令后排版有问题
//如果日志是以系统提示符开头,则进行处理
if(logLine.indexOf(sysname) == 0){
//如果一行的长度为80,则认为此行命令需要换行,设置标志位,需要继续取下一行
if(logLine.length >= cmdWidth){
getNextLine = true;
} else {
getNextLine = false;
}
cmd = logLine.replace(reg, ""); //提取出命令
cmds += cmd;
if(!getNextLine){
cmds += "\r\n";
}
} else if(logLine.search(/\S/) == -1){
getNextLine = false;
} else if(getNextLine){
cmds += logLine;
if(logLine.length != 80){
getNextLine = false;
cmds += "\r\n";
}
}
}
logArray = null;
log = null;
document.getElementById("cmds").value = cmds;
cmds = null;
}
/*================如果没有提取到任何命令,提示用户设备名是否正确================*/
function remindIfNoCommand(){
var cmds = document.getElementById("cmds").value;
if(!/\S/.test(cmds)){
alert("没有提取到命令,请确认设备名是否正确!");
}
}
/*================复制对象内容================*/
function doCopy(){
var content = document.getElementById("cmds").value;
var navi = navigator.appVersion.toLowerCase();
if(navi.indexOf("ie") != -1){
window.clipboardData.setData("Text", content);
} else if(navi.indexOf("chrome") != -1){
document.getElementById("output").select();
document.execCommand('Copy',false,null);
}
}
/*================清空文本框内容================*/
function doClear(contentObjects){
if(!isNull(contentObjects) && contentObjects.length > 0){
for(var i=0; i<contentObjects.length; i++){
document.getElementById(contentObjects[i]).value = "";
}
}
}
/*================公共函数================*/
function isNull(obj){
if(typeof(obj) == "undefined" || obj == null){
return true;
}
return false;
}
function isEmpty(str){
if(isNull(str)){
alert("String is null!");
return true;
}
if(/\S/.test(str)){
return false;
}
return true;
}
function isInt(num){
if(isEmpty(num) || !/^-?[0-9]+$/g.test(num)){
return false;
}
return true;
}
</script>
</head>
<body>
<fieldset>
<legend>参数设置</legend>
<table style="margin:5;">
<tr>
<td style="width:50;">行 宽:</td>
<td><input type="text" id="cmdWidth" style="width:70;" maxLength="5" value="80">字符</td>
</tr>
<tr>
<td style="color:red;">设备名:</td><td><input type="text" id="sysname" style="width:100;" maxLength="100" value="MA5600T"></td>
</tr>
<tr>
<td colspan="2">
<input type="button" class="button_4char" value="提取命令" οnclick="fetchCmd()">
<input type="button" class="button_2char" value="复制" οnclick="doCopy()">
<input type="button" class="button_2char" value="清空" οnclick="doClear(['log','cmds'])">
</td>
</tr>
</table>
</fieldset>
<br>
<table style="width:100%;border-width:3 thin">
<tr><td>日志</td></tr>
<tr><td>
<textarea id="log" style="height:100;">
MA5600T>enable
MA5600T#config
MA5600T(config)#service-port 0 vlan 100 adsl 0/9/0 vpi 0 vci 32 multi-service us
er-vlan 100</textarea></td></tr>
<tr><td> </td></tr>
<tr><td>历史命令</td></tr>
<tr><td><textarea id="cmds" style="height:250;"></textarea></td></tr>
</table>
<br>
<label id="author" style="color:blue;">
工具维护:xxx<br>
更新时间:2012年3月5日
</label>
</body>
</html>