分享一个好东东,动态Include文件 (Dynamic File Inclu
网络编程 2021-07-05 10:58www.168986.cn编程入门
相信很多ASP开发者都会抱怨ASP的Include方式太老土了,以的方式加载文件实在是太不舒服了,在实际项目中不管我是不是一开始就要用到这个文件,我总得早早的把它Include进来...这方面PHP就舒服很多...什么时候用,什么时候In...
早在03年就在蓝色理想上看到过动态Include的文章,当时已经觉得很厉害,但实际应用了一下,不方便而且Include的效果不好.
后来又在一网站上看到了改进版的,也不太好用~~~
哎,当时我真是觉得有点想放弃ASP了,由于公司还是用ASP来开发,我也是没有办法...
今天,我一定要记住今天~~~在国外的一个网站上我竟然发现了这样一个好东东,太棒了~~~Great works!!!
以前试的一些动态Include代码,都无法Include一个类,甚至函数~~~又或者Include文件中的Include无法被包含...
现在这个鬼佬(dselkirk)写的类可以为我们做到这些了~~~
<%
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path)
dim str_source
if str_path <> "" then
str_source = readfile(str_path)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#include")
str_mid = lcase(getbetween(str_source,"<!--#include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
set objfile = objfso.opentextfile(str_path, 1, false)
if err.number = 0 then
readfile = objfile.readall
objfile.close
end if
set objfile = nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>
后来又在一网站上看到了改进版的,也不太好用~~~
哎,当时我真是觉得有点想放弃ASP了,由于公司还是用ASP来开发,我也是没有办法...
今天,我一定要记住今天~~~在国外的一个网站上我竟然发现了这样一个好东东,太棒了~~~Great works!!!
以前试的一些动态Include代码,都无法Include一个类,甚至函数~~~又或者Include文件中的Include无法被包含...
现在这个鬼佬(dselkirk)写的类可以为我们做到这些了~~~
代码如下:
<%
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path)
dim str_source
if str_path <> "" then
str_source = readfile(str_path)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#include")
str_mid = lcase(getbetween(str_source,"<!--#include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
set objfile = objfso.opentextfile(str_path, 1, false)
if err.number = 0 then
readfile = objfile.readall
objfile.close
end if
set objfile = nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程