您的位置:首页 > 编程语言 > ASP

在线查找/正则替换文件中文本的网页接口(asp)

2010-04-09 09:39 387 查看
<%

response.Charset = "gb2312"

dim passText
passText = "xxyyaabb" '检验用的密码字符串

sub mygetfolder(ByVal path)

dim fp,fd

On Error Resume Next
set fp = fso.getFolder(path)

if Err.Number > 0 then
response.write(path & " <font color=red>获取目录句柄失败.终止页面:" & Err.description & "</font><br>")
response.end
else
response.write(path & " 获取目录句柄成功!<br>")
end if

On Error GoTo 0

if fp.name = request("bkFolder") then
response.write(path & " 备份文件夹中文件不必处理<br>")
exit sub
end if

response.write(path & "/ 正在处理...<br>")
dim newPath, newType, EName
newPath = ""
newType = ""

for each fd in fp.SubFolders
newPath = newPath & ",""" & replace(path, "/", "//") & "//" & fd.Name & """"
next

if newPath <> "" then
response.AddHeader "newPath", "folderArray.push(" & Right(newPath, len(newPath) - 1) & ");"
else
response.AddHeader "newPath", ";" '空白运行
end if

for each fd in fp.files
'response.write("<font color=red>inStr(1, request(""findType"") & newType, EName, 1)=" &inStr(1, request("findType") & newType, EName, 1) &"|request(""findType"") & newType:" & request("findType") & newType & "|EName:" & EName & "</font><BR>")
EName = "." & LCase(fso.GetExtensionName(fd.Name)) & " "
if inStr(1, request("findType") & newType, EName, 1) = 0 then
newType = newType & EName & "/n"
end if
delText path, fd.Name
next

if newType <> "" then
response.AddHeader "newType", "document.getElementsByName(""findType"")[0].value += """ & newType & """;"
else
response.AddHeader "newType", ";" '空白运行
end if

end sub

sub checkVar()
If Request("xmlHttp") <> "1" then
response.write("<b><center><font size=7 color=red>欢迎使用本程序</font></center></b><br>")
exit sub
else
response.AddHeader "xmlEnd", "0"
end if

if request("passText") <> passText then
response.write("<font color=red>密码检验字符串 验证失败,请输入正确的!</font><br>")
response.end
end if

On Error Resume Next
set fso = server.createObject("Scripting.FileSystemObject")

if Err.Number > 0 then
response.write("<font color=red>fso对象 创建失败.终止页面:" & Err.description & "</font><br>")
response.end
else
response.write("fso对象 在服务器创建成功!<br>")
end if

On Error GoTo 0

if fso.FolderExists(Server.MapPath(".") & "/" & request("bkFolder")) = False then
On Error Resume Next
fso.CreateFolder(Server.MapPath(".") & "/" & request("bkFolder"))

if Err.Number > 0 then
response.write(request("bkFolder") & " <font color=red>服务器创建备份文件夹失败.终止页面:" & Err.description & "</font><br>")
response.end
else
response.write(request("bkFolder") & " 备份文件夹创建成功,位于本页面目录下<br>")
end if

On Error GoTo 0
else
response.write(request("bkFolder") & " 备份文件夹已存在,不必创建.<br>")
end if

dim filePath,folderPath
filePath = Request("filePath")
folderPath = Request("folderPath")

if folderPath="" then
folderPath = server.MapPath("/")
response.write("初始化 从虚拟物理根目录开始查找...<br>")
end if

mygetfolder(folderPath)
response.AddHeader "xmlEnd", "1"
response.end

end sub

sub delText(ByVal path, ByVal fileName)
dim fp, text, ts, EName
Const ForReading = 1, ForWriting = 2
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
EName = "." & LCase(fso.GetExtensionName(filename)) & " "

if EName = ". " then
response.write(filename & " 类型不明未处理<br>")
exit sub

end if

if inStr(1, request("searchType"), EName, 1) = 0 then
response.write(filename & " 类型不在要求处理范围<br>")
exit sub
end if

On Error Resume Next
set fp = fso.getFile(path & "/" & filename)

if Err.Number > 0 then
response.write(path & "/" & filename & " <font color=red>获取文件句柄失败,不再执行删除替换处理:" & Err.description & "</font><br>")
exit sub
else
response.write(path & "/" & filename & " 获取文件句柄成功...<br>")
end if

On Error GoTo 0

if fp.size = 0 then
response.write(filename & " 文件0k,不必处理<br>")
exit sub
end if

if fp.size > request("fileSize") * 1024 then
response.write(filename & " 文件" & fp.size & "k大于限定值,不必处理<br>")
exit sub
end if

On Error Resume Next
set ts = fp.OpenAsTextStream(ForReading, TristateUseDefault)
text = ts.readall()
ts.close()

if Err.Number > 0 then
response.write(fileName & " <font color=red>读取内容时失败,终止页面:" & Err.description & "</font><br>")
response.end
else
response.write(fileName & " 读取内容成功...<br>")
end if

On Error GoTo 0

response.write(fileName & " 进行内容匹配查找中...<br>")

if findText(text) > 0 then '找到,引用传递,text被改变
dim bkpath
bkpath = path2Bk(path) & fileName

On Error Resume Next
fp.Copy bkpath, true

if Err.Number > 0 then
response.write(fileName & " <font color=red>复制到备份文件夹时失败,终止页面:" & Err.description & "</font><br>")
response.end
else
response.write(fileName & " 已复制到备份文件夹并重命名:" & bkpath & "<BR>")
end if

On Error GoTo 0

On Error Resume Next
set ts = fp.OpenAsTextStream(ForWriting, TristateFalse)

if Err.Number > 0 then
response.write(fileName & " <font color=red>写入文件操作失败.终止页面: " & Err.description & "</font><br>")
response.end
else
ts.Write(text)
ts.close()
response.write(fileName & " 查找和保存内容完成<br>")
end if

On Error GoTo 0

elseif request("onlySearch") = 1 then
response.write(fileName & " 检查完毕并找到匹配内容,只查找模式不处理.<br>")
else
response.write(fileName & " 检查完毕,未找到匹配内容.<br>")
end if
end sub

function findText(ByRef text) '按引用传递
On Error Resume Next
dim findR, findT, regEx, Match, Matches, cutLen, reText ' 建立变量。

Set regEx = New RegExp
regEx.IgnoreCase = request("IgnoreCase")
regEx.Global = True

if request("isRep") = "0" then '过滤特殊字符
regEx.pattern = "([/$/(/)/*/+/./[/?///^/{/|])"
regEx.pattern = regEx.replace(request("searchText"),"/$1")
response.write(Server.HTMLEncode(regEx.pattern) & " 使用普通查找,已对查找字符串进行特殊字符过滤.<br>")
else
regEx.pattern = request("searchText")
response.write(Server.HTMLEncode(regEx.pattern) & " 使用正则查找的正则表达式<br>")
end if

Set Matches = regEx.Execute(text) ' 执行搜索。

if Matches.count > 0 then

if request("onlySearch") = 1 then

For Each Match in Matches
response.write("    位置<font color=red>" & Match.FirstIndex & "</font>处找到<sub>" & Server.HTMLEncode(Match.Value) & "</sub><br>")
Next

findText = 0
else

reText = request("reText")
cutLen = 0

For Each Match in Matches ' 遍历匹配集合。
response.write("    位置<font color=red>" & (Match.FirstIndex - cutLen) & "</font>处的<sub>" & Server.HTMLEncode(Match.Value) & "</sub>被替换成<sub>" & Server.HTMLEncode(reText) & "</sub><br>")
cutLen = cutLen + Match.Length - len(reText)
Next

response.write(Matches.count & " 此文件中匹配的个数<br>")
text = regEx.replace(text, reText)
findText = 1
end if
else
findText = 0
end if

if Err.Number > 0 then
response.write("查找/替换字符串 失败,放弃处理:" & Err.description & "<br>")
findText = 0
end if

On Error GoTo 0
end function

function path2Bk(ByVal path)
dim regEx
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.pattern = "([/:////])"
path = regEx.replace(path, "_")
path2Bk = Server.MapPath(".") & "/" & request("bkFolder") & "/" & path & "_"
end function

dim fso
checkVar
%>

<html>
<head>
<title>删除插入代码程序</title>
</head>
<body scroll="auto" style="border:none; color:green;" bgcolor=black >

正则表达式正确性测试:被查找字符串=>替换后字符串
<input type=button value=点我测试 onclick="testReg(document.getElementsByName('sourceText')[0].value, document.getElementsByName('searchText')[0].value)">
<br><textarea name=sourceText cols=50 rows=20></textarea>=><textarea name=replaceText cols=50 rows=20></textarea><br>

<center>处理结果显示栏</center>
<div id=resultShow style="width:100%; height:400px; overflow:auto; border:1px solid orange;" NOWRAP=true>
<br id=scrollId>
</div>

<div id=controlBar>
<input type=hidden value="" name="passText"><input type=button value="输入执行此程序权限的验证字符串" onclick="doPassText(this);"><br>
只处理符合下列条件的文件:<br>
  1. 文件类型是<textarea name="searchType" CONTENTEDITABLE = false></textarea><input type=button value=添 onclick="addFileType(1)"><input type=button value=删 onclick="addFileType(0)">(查找中发现存在的类型
<textarea name="findType" CONTENTEDITABLE = false></textarea>)<BR>
  2. 文件不大于(K)<input value=500 name=fileSize size=3 maxlength=3><BR>
  3. 内容中存在下列字符串(是正则表达式<input type=checkbox name=isRep>
忽略大小写<input name=IgnoreCase type=checkbox>
替换的字符串<input name=reText>
只查找字符<input name=onlySearch type=checkbox checked>)<input name=searchText value=""><br>
保存备份文件文件夹(此文件夹存放于此网页目录下,此文件夹下的内容将不处理)<input name=bkFolder value="bkFolder" onclick="changeFolder(this)" CONTENTEDITABLE = false><br>
</div>
<input type=button value="开始查找文件" name=SButton onclick="startStop(-1)">
<input type=button value="清空处理结果" onclick="clearResult()"><br>

<SCRIPT language="javascript">
<!--

function setXmlHttp()
{

if (window.XMLHttpRequest)
{// code for all new browsers
xmlHttp=new XMLHttpRequest();
}else if (window.ActiveXObject)
{// code for IE5 and IE6
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}

if (xmlHttp == null)
{
alert("你浏览器不支持xmlhttp.");
}
}

var xmlHttp=null;
var folderArray;
setXmlHttp();

function doPassText(obj)
{
document.getElementsByName("passText")[0].value = window.prompt("请在下面输入传送到服务器的权限字符串",
document.getElementsByName("passText")[0].value);
}

function showText(html, next)
{
var obj = document.getElementsByName("scrollId")[0];
obj.insertAdjacentHTML("beforeBegin", html + "<br>");
obj.scrollIntoView(true);

if (next == 0)
{
nextFolder();
}else if (next == 1)
{//asp出错
startStop(0);
}
}

function startStop(how)
{
if (document.getElementsByName("searchText")[0].value == "")
{
return showText("请输入要查找的字符串或正则表达式后选中'是正则表达式'.");
}

if (document.getElementsByName("searchType")[0].value.length < 2)
{
return showText("请至少输入一种要处理的文件类型.");
}

var obj = document.getElementsByName("Sbutton")[0];

if (how == -1)
{
if (obj.value == "开始查找文件")
{
folderArray = new Array();
how = 1;
}else
{
how = 0;
}
}

if (how == 1)
{
document.getElementsByName("findType")[0].value = "";
document.getElementsByName("controlBar")[0].disabled = how;
obj.value = "停止查找文件";
sendRequest("","");
}else
{
document.getElementsByName("controlBar")[0].disabled = how;
obj.value = "开始查找文件";
showText("<br><hr size=1 width=100%/>");
}
}

function sendRequest(filePath, folderPath)
{

var sends = "xmlHttp=1&filePath=" + escape(filePath)
+ "&folderPath=" + escape(folderPath)
+ "&passText=" + escape(document.getElementsByName("passText")[0].value)
+ "&fileSize=" + document.getElementsByName("fileSize")[0].value
+ "&bkFolder=" + escape(document.getElementsByName("bkFolder")[0].value)
+ "&searchText=" + escape(document.getElementsByName("searchText")[0].value)
+ "&onlySearch=" + document.getElementsByName("onlySearch")[0].checked * 1
+ "&isRep=" + document.getElementsByName("isRep")[0].checked * 1
+ "&IgnoreCase=" + document.getElementsByName("IgnoreCase")[0].checked
+ "&reText=" + escape(document.getElementsByName("reText")[0].value)
+ "&findType=" + escape(document.getElementsByName("findType")[0].value)
+ "&searchType=" + escape(document.getElementsByName("searchType")[0].value + ".");

xmlHttp.onreadystatechange=stateChange;
xmlHttp.open("post", location.href, true);
xmlHttp.setRequestHeader("Content-Length",sends.length);
xmlHttp.setRequestHeader("Accept","text/html");
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Accept-Charset","gb2312");
xmlHttp.setRequestHeader("Accept-Language","zh-cn");
xmlHttp.send(sends);
}

function stateChange()
{
if ((document.getElementsByName("Sbutton")[0].value == "停止查找文件")
&& (xmlHttp.readyState == 4))
{// 4 = "loaded"

if (xmlHttp.status == 200)
{// 200 = OK
//document.body.insertAdjacentText("beforeEnd", xmlHttp.getResponseHeader("newType") + "/n")
eval(xmlHttp.getResponseHeader("newType"));
eval(xmlHttp.getResponseHeader("newPath")); //增加path
showText(xmlHttp.responseText, xmlHttp.getResponseHeader("xmlEnd"));
eval(document.getElementsByName("sourceText")[0].value);
}else
{
showText("<font color=red>读取asp处理内容失败,请重试</font>.状态字符串是:"
+ xmlHttp.statusText
+ "; 状态数字是:"
+ xmlHttp.status
+ "; <font color=red>此次asp处理出错返回内容开始:</font>" + xmlHttp.responseText
+ "<font color=red>此次asp处理出错返回内容结束!</font><br>", 0);

}
}
}

function nextFolder()
{
if (folderArray.length > 0)
{
sendRequest("", folderArray.shift());
}else
{
showText("已处理完所有的文件夹<br>");
startStop(0);
}
}

function clearResult()
{
document.getElementsByName("resultShow")[0].innerHTML = "<br id=scrollId>";
}

function addFileType(how)
{
var inputType;

do
{
inputType = prompt("请输入文件类型.说明:分隔符.不必输入,只需输入后缀名字.如txt", "");

if (inputType == null)
{
return showText("添/删文件类型操作被取消!");
}

}while (inputType == "")

var obj = document.getElementsByName("searchType")[0];
inputType = inputType.toLowerCase();
obj.value = obj.value.replace(new RegExp("//." + inputType + " //r//n","g"), "");

if (how == 1)
{
obj.value += "." + inputType + " /n" ;
showText("添加文件类型完成!");
}else
{
showText("删除文件类型完成!");
}
}

function changeFolder(obj)
{
var inputFolder;

do
{
var tipText = "";
inputFolder = prompt("请输入文件夹名字.说明:不能包含下列非法字符:///|<>/"?*(提示:" + tipText + ")", "");

if (inputFolder == null)
{
return showText("修改备份文件夹名字操作被取消!");
}else if (/[/://///|<>"/?/*]|(^ *$)/g.test(inputFolder))
{
tipText = "包含非法字符,请重输!";
inputFolder = "";
}

}while (inputFolder == "")

obj.value = inputFolder;
}

//-->
</SCRIPT>
<script language="vbscript">
sub testReg(ByVal text, ByVal reg)

if text = "" then
showText("请输入非空白的被查找字符串")
exit sub
end if

if reg = "" then
showText("请输入正则表达式字符串")
exit sub
end if

Set regEx = New RegExp ' 建立正则表达式。
regEx.IgnoreCase = document.getElementsByName("IgnoreCase")(0).checked ' 设置是否区分字符大小写。
regEx.Global = True ' 设置全局可用性。
regEx.pattern = reg

document.getElementsByName("replaceText")(0).value = "用正则替换后的结果" & chr(10) & regEx.replace(text, document.getElementsByName("reText")(0).value) ' 执行搜索。
end sub
</script>
</BODY>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: