找回密码
 加入
搜索
查看: 3361|回复: 5

[系统综合] 判断ListView删除INI,提示数组错误或超出

  [复制链接]
发表于 2012-2-23 03:51:03 | 显示全部楼层 |阅读模式

获取编号,判断INI内的数值,相互判断然后删除!
可老提示这个!~
Dim $var,$dir,$i,$GUI_ListBox
Func del()

        $var = IniReadSectionNames($dir)

        If @error Then

                MsgBox(4096, "", "发生错误,可能目标文件并非标准的INI文件.")

        Else
                  Global $ListTxt0 = _GUICtrlListView_GetItemText($GUI_ListBox, _GUICtrlListView_GetNextItem($GUI_ListBox), 0)
                                 
                For $i = 1 To $var[0]
                                        
                  Global $ListTxt1 = IniRead($dir, $var[$i], "a", "Not Found")
                        If $ListTxt1 = $ListTxt0 Then
                                IniDelete($dir, $var[$i],  Default)

                                ;MsgBox(0, 0, "删除成功")

                                refresh()

                        EndIf

                Next

        EndIf

EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-2-23 10:09:54 | 显示全部楼层
俺是菜鸟,占位学习了
 楼主| 发表于 2012-2-23 10:43:07 | 显示全部楼层
稍稍顶一下,不然没人回了!~
发表于 2012-2-24 10:56:24 | 显示全部楼层
本帖最后由 xiehuahere 于 2012-2-24 11:00 编辑

回复 1# 那片叶子


    用 IniDelete 后,字段的总数减少了,排序也必然发生改变。没有 $var[0] 这么多字段了,所以会出现数组访问越界啊。
  根据你的需求,可以考虑以下两种修改方式之一:
  1)If $ListTxt1 = $ListTxt0 Then  在判断条件成立并完成相应处理动作后,用ExitLoop退出循环,不要再向下走了。
  2)从后往前遍历,For $i = $var[0] To 1 Step -1,这样即使用IniDelete也不会影响前面的字段排序。

PS: 如果获取的键值是字符串而不是数值形式,建议使用“==”比较。
用“=”:如果有一方是数值,则进行数值比对,相当于两边都先使用了 Number() 再进行比对。以字母开头的字符串将被视为数值零,以数字开头的字符串将返回被(首个)非数字字符截断后的结果。
用“==”:字符串比对,相当于两边都先使用了 String() 再进行比对。

评分

参与人数 1金钱 +20 贡献 +1 收起 理由
afan + 20 + 1

查看全部评分

发表于 2012-2-24 11:47:01 | 显示全部楼层
将for换成while就行了
while会每次检查,for只检查一次。
 楼主| 发表于 2012-2-24 17:23:18 | 显示全部楼层
谢谢了!~~~~请管理转移至已解决区域
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-18 18:46 , Processed in 0.093016 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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