【已解决】帮忙找有关数组的错误
本帖最后由 newuser 于 2012-10-30 08:59 编辑Func _GetLinkKB();获得补丁连接地址的KB部分并保存到WebList.ini
For $oLink In $oLinks
;地址样例:http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe
$file = StringSplit($oLink.href, "/", 1);得到1个数组,1表示按照整个分割符字符串来划分,0表示1个个字符来划分
$filekb = StringSplit($file, "-", 1)
If IniRead($FixedPatchsList, "已经安装的补丁", $filekb, "") = "" Then
;注意:如果IniRead($FixedPatchsList,"已经安装的补丁",$filekb,"")变成
;IniRead($FixedPatchsList,"已经安装的补丁",$filekb,"1"),将出现读NewList.ini文件错
IniWrite($NewPatchsList, "未安装补丁", $j, $oLink.href)
EndIf
$j += 1
Next
EndFunc ;==>_GetLinkKB执行代码后总出现如下错误:
$filekb = StringSplit($file, "-", 1)
$filekb = StringSplit(^ ERROR
这个$file是截取出的类似WindowsServer2003-KB980195-x86-CHS.exe,我现在要对它再次截取获得其中的KB部分? 回复 1# newuser
等待中...
谢谢! 先看看$file的元素有没有吧 本帖最后由 xiehuahere 于 2012-10-26 14:42 编辑
回复 1# newuser
用这个就可以不用考虑烦人的数组了。$str = "http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe"
$str = StringTrimLeft($str, StringInStr($str, '/', 0, -1)) ;取得 WindowsServer2003-KB980195-x86-CHS.exe
$str = StringRegExpReplace($str, '.*-(KB\d+)-.*', '$1') ;取得 KB980195
MsgBox(0, 0, $str) Dim $link="http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe"
$link=StringRegExp($link,"(KB\d+|kb\d+)",3)
MsgBox(0,"",$link) 回复 1# newuser
因为 $file 中没有元素,应该是有些地址中少了几个 "/" .
先试试这个.
$file = StringSplit("http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe", "/", 1)
$filekb = StringSplit($file, "-", 1)
MsgBox(0, '', $filekb)
再试试这个.
$file = StringSplit("http:/100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe", "/", 1)
$filekb = StringSplit($file, "-", 1)
MsgBox(0, '', $filekb) 看看帮助,判断一下$array
返回值
返回值 返回一个数组,第一个元素($array)保存拆分后子串的数量,其余元素($array,$array 等等)则保存着拆分后的每个字符串.
若(在目标字符串中)未发现分隔符则 @error 将被设为1,子串数量($array)等于1,而函数将返回整个字符串($array).
StringSplit 拆出来的元素一共6个,关闭首项,最后的索引是5 Local $a = 'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'
Local $file = StringSplit($a, "/", 1)
Local $str = StringSplit($file, '-', 1)
MsgBox(0, 0, $str)
貌似没问题呀 Local $a = 'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'
Local $file = StringSplit($a, "/", 1)
Local $str = StringSplit($file, '-', 1)
MsgBox(0, 0, $str)
貌似没问题呀 回复 10# netegg
谢谢老大,因为所有的补丁文件都是“'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'”这个形式,而且我也在 stringsplit后都msgbox 仔细查看了每个获取结果,都对啊!但是为什么还是显示这个stringsplit 错误呢?而且同样一个程序我在另一台winserver2003的机器运行,就没有错误? 回复 8# netegg
分拆的元素不是六个吗?如果是5,那么$filekb = StringSplit($file, "-", 1)运行是错误的? 回复 7# www378660084
谢谢。
不过 若(在目标字符串中)未发现分隔符则这个应该不存在,因为补丁路径和名称形式都是我人为构造的 ,它们都是诸如:
http://10.64.240.23:801/patchs/10-060/NDP20SP1-KB983582-x86.exe
这个形式,能帮助解决吗? 本帖最后由 netegg 于 2012-10-30 08:28 编辑
回复 11# newuser
如果确定格式相同,何必拆,即使不用正则,StringMid($a, StringInStr($a,'-KB')+1, 8),也可以
回复 12# newuser
我看错了 本帖最后由 newuser 于 2012-10-30 08:53 编辑
回复 7# www378660084
谢谢,确实是我马虎了,代码没有问题,是我构造的页面有一个隐藏链接没有拿掉,原本是给同学提供一个非法链接的,结果时间久了,竟然忘记了{:face (303):}
页:
[1]
2