newuser 发表于 2012-10-26 11:33:10

【已解决】帮忙找有关数组的错误

本帖最后由 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部分?

newuser 发表于 2012-10-26 11:53:06

回复 1# newuser
等待中...
谢谢!

netegg 发表于 2012-10-26 13:53:19

先看看$file的元素有没有吧

xiehuahere 发表于 2012-10-26 14:38:16

本帖最后由 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)

haijie1223 发表于 2012-10-27 08:16:39

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)

lixiaolong 发表于 2012-10-27 12:37:11

回复 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)

www378660084 发表于 2012-10-27 12:59:53

看看帮助,判断一下$array
返回值
返回值 返回一个数组,第一个元素($array)保存拆分后子串的数量,其余元素($array,$array 等等)则保存着拆分后的每个字符串.
若(在目标字符串中)未发现分隔符则 @error 将被设为1,子串数量($array)等于1,而函数将返回整个字符串($array).
StringSplit

netegg 发表于 2012-10-27 19:11:42

拆出来的元素一共6个,关闭首项,最后的索引是5

netegg 发表于 2012-10-27 19:19:46

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)


貌似没问题呀

netegg 发表于 2012-10-27 19:19:54

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)


貌似没问题呀

newuser 发表于 2012-10-30 08:12:33

回复 10# netegg
谢谢老大,因为所有的补丁文件都是“'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'”这个形式,而且我也在 stringsplit后都msgbox 仔细查看了每个获取结果,都对啊!但是为什么还是显示这个stringsplit 错误呢?而且同样一个程序我在另一台winserver2003的机器运行,就没有错误?

newuser 发表于 2012-10-30 08:14:32

回复 8# netegg
分拆的元素不是六个吗?如果是5,那么$filekb = StringSplit($file, "-", 1)运行是错误的?

newuser 发表于 2012-10-30 08:17:22

回复 7# www378660084
谢谢。
不过 若(在目标字符串中)未发现分隔符则这个应该不存在,因为补丁路径和名称形式都是我人为构造的 ,它们都是诸如:
http://10.64.240.23:801/patchs/10-060/NDP20SP1-KB983582-x86.exe
这个形式,能帮助解决吗?

netegg 发表于 2012-10-30 08:22:51

本帖最后由 netegg 于 2012-10-30 08:28 编辑

回复 11# newuser
如果确定格式相同,何必拆,即使不用正则,StringMid($a, StringInStr($a,'-KB')+1, 8),也可以

回复 12# newuser
我看错了

newuser 发表于 2012-10-30 08:50:02

本帖最后由 newuser 于 2012-10-30 08:53 编辑

回复 7# www378660084
谢谢,确实是我马虎了,代码没有问题,是我构造的页面有一个隐藏链接没有拿掉,原本是给同学提供一个非法链接的,结果时间久了,竟然忘记了{:face (303):}
页: [1] 2
查看完整版本: 【已解决】帮忙找有关数组的错误