Microsoft VBScript 运行时错误 '800a0005'无效的过程调用或参数: 'Instr'

本文解决了在使用VBScript进行文件上传过程中遇到的'800a0005'错误,并提供了修改代码的具体方法。同时,针对上传特定类型文件(如jpg、rar等)时的限制进行了调整。

从后台上传软件时出现这个报警,麻烦帮忙解决一下!报警内容:Microsoft VBScript 运行时错误 '800a0005' 无效的过程调用或参数: 'Instr' /upload.asp, line 656代码:if Instr(intTemp,strItem,"filename=""")<>0 thenif not objForm.Exists(strInam&"_From") then strFileItem=strFileItem&strSplit&strInam if binItem.Size<>0 then intTemp=intTemp+13 strFtyp=Mid(strItem,Instr(intTemp,strItem,"Content-Type: ")+14) strTemp=Mid(strItem,intTemp,Instr(intTemp,strItem,"""")-intTemp) intTemp=InstrRev(strTemp,"/") strFnam=Mid(strTemp,intTemp+1) objForm.Add strInam&"_Type",strFtyp objForm.Add strInam&"_Name",strFnam objForm.Add strInam&"_Path",Left(strTemp,intTemp) objForm.Add strInam&"_Size",lngFsiz if Instr(intTemp,strTemp,".")<>0 then //这里是656行 strFext=Mid(strTemp,InstrRev(strTemp,".")+1) else strFext="" end if

问题补充:

这个解决了:把 if Instr(intTemp,strTemp,".")<>0 then 改成 if Instr(intTemp,strTemp)<>0 then就可以了,只是现在只能传jpg不能传rar,代码如下:uploadtype="jpg/rar/swf/"size=Uprequest.Form("file_size")showsize=size & " Byte" if size>1024 then size=(size/1024) showsize=size & " KB" end if if size>1024 then size=(size/1024) showsize=formatnumber(size,2) & " MB" end if response.write "<script language=""javascript"">parent.form1.size.value='"&showsize&"';" response.write "</script>" response.write "<div style=""padding-top:5px;padding-bottom:5px;""> <font color=red>文件上传成功</font> [<a href='javascript:history.go(-1)'>重新上传</a>]</div>" end if

提问者:

 

 

 

 

最佳答案

 

if Instr(intTemp,strItem,"filename=""")<>0 then这句中间的最后两个引号去掉,看看InStr 函数的用法返回某字符串在另一字符串中第一次出现的位置。InStr([start, ]string1, string2[, compare])参数start可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。string1必选项。接受搜索的字符串表达式。string2必选项。要搜索的字符串表达式。compare可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。设置compare 参数可以有以下值:常数 值 描述 vbBinaryCompare 0 执行二进制比较。 vbTextCompare 1 执行文本比较。

 

 

这个应该是你上传的文件包含路径的问题!

 

你没有说清楚后面的错误代码,你试下在IE(如果你是IE7及以上版本)的选项里面

安全里面的自定义级别,里面有一个包含上传文件 路径,这个是禁用的,你启用就好了

<think>好的,我需要解决的问题是判断字符串 'GPIB::30::INSTR' 是否存在于元组 ('ASRL3::INSTR', 'GPIB0::30::INSTR') 中,并找出如何正确匹配的方法。首先,我应该仔细查看这两个字符串的结构。 首先,目标字符串是 'GPIB::30::INSTR',而元组中的元素是 'ASRL3::INSTR' 和 'GPIB0::30::INSTR'。看起来用户可能想检查是否存在某种模式匹配的项,而不仅仅是完全相等的字符串。例如,目标字符串可能省略了接口号(比如GPIB0中的0),而元组中的元素包含接口号。因此,直接使用 'in' 操作符可能无法匹配,因为字符串不完全相同。 接下来,我需要分析两者的结构。元组中的第二个元素是 'GPIB0::30::INSTR',而目标字符串是 'GPIB::30::INSTR'。区别在于接口名称后的数字,元组中的是GPIB0,而目标字符串是GPIB。可能用户希望匹配的是GPIB后面的部分,比如忽略接口号,者允许通配符? 如果用户希望进行模糊匹配,比如忽略接口号,者允许不同的接口号,那么需要编写更复杂的匹配逻辑。例如,使用正则表达式来匹配类似的结构。假设用户想匹配GPIB后面可能有数字,然后是::30::INSTR的部分,那么可以构造一个正则表达式来匹配这种情况。 例如,正则表达式可以设计为:r'^GPIB\d*::30::INSTR$'。这里的\d*表示0个多个数字,这样无论是GPIB还是GPIB0都能匹配。然后,遍历元组中的每个元素,用这个正则表达式检查是否匹配。 另外,如果用户需要严格匹配,即完全相同的字符串,那么直接使用 'in' 操作符即可。但根据示例中的情况,目标字符串不在元组中,所以直接查找会返回False。用户可能需要的是模糊匹配,因此需要正则表达式的方法。 总结下来,正确的做法是使用正则表达式进行模式匹配,而不是直接查找。编写一个正则表达式,匹配GPIB后面可能有数字的情况,然后遍历元组中的每个元素进行检查。 因此,代码部分应该导入re模块,定义目标字符串,然后遍历元组,用正则表达式进行匹配。如果任何一个元素匹配,则返回存在,否则不存在。</think><< 要判断字符串'GPIB::30::INSTR'是否存在于元组('ASRL3::INSTR', 'GPIB0::30::INSTR')中,需要注意字符串的精确匹配。根据示例分析: ```python target = 'GPIB::30::INSTR' instruments = ('ASRL3::INSTR', 'GPIB0::30::INSTR') # 直接匹配会失败,因为字符串不一致 print(target in instruments) # 输出: False # 正确做法:使用正则表达式进行模式匹配 import re pattern = r'GPIB\d*::30::INSTR' # 匹配GPIB后可能有数字的情况 # 遍历检查元组元素 found = any(re.fullmatch(pattern, instr) for instr in instruments) print(found) # 输出: True(因为匹配到GPIB0::30::INSTR) ``` **解释说明**: 1. 直接使用`in`操作符失败,因为目标字符串缺少接口编号`0`(GPIB vs GPIB0) 2. 使用正则表达式`r'GPIB\d*::30::INSTR'`可以: - `\d*`匹配0个多个数字 - `fullmatch`确保整个字符串匹配模式 - 成功匹配到`GPIB0::30::INSTR` 3. `any()`函数在发现第一个匹配项时立即返回True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值