找回密码
 加入
搜索
查看: 7837|回复: 18

[AU3基础] 【已解决】帮忙找有关数组的错误

  [复制链接]
发表于 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[6], "-", 1)
                
                If IniRead($FixedPatchsList, "已经安装的补丁", $filekb[2], "") = "" Then
                        ;注意:如果IniRead($FixedPatchsList,"已经安装的补丁",$filekb[2],"")变成
                        ;IniRead($FixedPatchsList,"已经安装的补丁",$filekb[2],"1"),将出现读NewList.ini文件错
                        IniWrite($NewPatchsList, "未安装补丁", $j, $oLink.href)
                EndIf
                $j += 1
        Next
EndFunc   ;==>_GetLinkKB
执行代码后总出现如下错误:
$filekb = StringSplit($file[6], "-", 1)
$filekb = StringSplit(^ ERROR
这个$file[6]是截取出的类似WindowsServer2003-KB980195-x86-CHS.exe,我现在要对它再次截取获得其中的KB部分?
 楼主| 发表于 2012-10-26 11:53:06 | 显示全部楼层
回复 1# newuser
等待中...
谢谢!
发表于 2012-10-26 13:53:19 | 显示全部楼层
先看看$file的元素有没有[6]吧
发表于 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)
发表于 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[0])
发表于 2012-10-27 12:37:11 | 显示全部楼层
回复 1# newuser


因为 $file[6] 中没有元素,应该是有些地址中少了几个 "/" .

先试试这个.
$file = StringSplit("http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe", "/", 1)

$filekb = StringSplit($file[6], "-", 1)

MsgBox(0, '', $filekb[2])


再试试这个.
$file = StringSplit("http:/100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe", "/", 1)

$filekb = StringSplit($file[6], "-", 1)

MsgBox(0, '', $filekb[2])
发表于 2012-10-27 12:59:53 | 显示全部楼层
看看帮助,判断一下$array[0]
返回值
返回值 返回一个数组,第一个元素($array[0])保存拆分后子串的数量,其余元素($array[1],$array[2] 等等)则保存着拆分后的每个字符串.
若(在目标字符串中)未发现分隔符则 @error 将被设为1,子串数量($array[0])等于1,而函数将返回整个字符串($array[1]).
StringSplit
发表于 2012-10-27 19:11:42 | 显示全部楼层
拆出来的元素一共6个,关闭首项,最后的索引是5
发表于 2012-10-27 19:19:46 | 显示全部楼层
[au3]Local $a = 'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'
Local $file = StringSplit($a, "/", 1)
Local $str = StringSplit($file[6], '-', 1)
MsgBox(0, 0, $str[2])

[/au3]
貌似没问题呀
发表于 2012-10-27 19:19:54 | 显示全部楼层
[au3]Local $a = 'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'
Local $file = StringSplit($a, "/", 1)
Local $str = StringSplit($file[6], '-', 1)
MsgBox(0, 0, $str[2])

[/au3]
貌似没问题呀
 楼主| 发表于 2012-10-30 08:12:33 | 显示全部楼层
回复 10# netegg
谢谢老大,因为所有的补丁文件都是“'http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe'”这个形式,而且我也在 stringsplit后都msgbox 仔细查看了每个获取结果,都对啊!但是为什么还是显示这个stringsplit 错误呢?而且同样一个程序我在另一台winserver2003的机器运行,就没有错误?
 楼主| 发表于 2012-10-30 08:14:32 | 显示全部楼层
回复 8# netegg
分拆的元素不是六个吗?如果是5,那么$filekb = StringSplit($file[5], "-", 1)运行是错误的?
 楼主| 发表于 2012-10-30 08:17:22 | 显示全部楼层
回复 7# www378660084
谢谢。
不过 若(在目标字符串中)未发现分隔符则这个应该不存在,因为补丁路径和名称形式都是我人为构造的 ,它们都是诸如:
http://10.64.240.23:801/patchs/10-060/NDP20SP1-KB983582-x86.exe
这个形式,能帮助解决吗?
发表于 2012-10-30 08:22:51 | 显示全部楼层
本帖最后由 netegg 于 2012-10-30 08:28 编辑

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

回复 12# newuser
我看错了
 楼主| 发表于 2012-10-30 08:50:02 | 显示全部楼层
本帖最后由 newuser 于 2012-10-30 08:53 编辑

回复 7# www378660084
谢谢,确实是我马虎了,代码没有问题,是我构造的页面有一个隐藏链接没有拿掉,原本是给同学提供一个非法链接的,结果时间久了,竟然忘记了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 21:20 , Processed in 0.125382 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表