找回密码
 加入
搜索
查看: 1804|回复: 3

[效率算法] 同时对多个数据匹配处理编译出错[已解决]

[复制链接]
发表于 2016-8-16 10:16:34 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2016-8-16 15:45 编辑

问题描述:单条测试的时候没有出现这个错误,加入FOR循环和读取EXCEL表格里的内容就编译出错了,请指点一下。



#include <Excel_new.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)

For $Row = 0 To UBound($ProdArray, 2)
        Local $aArray1 = StringRegExp($ProdArray[3][$Row + 1], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[3][$Row + 1], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[3][$Row + 1], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 and $b >= 0 and $c > 0
                        MsgBox(0, '', $ProdArray[3][$Row + 1] & '        ' & '结果是: 符合')
        EndSelect
Next



本帖子中包含更多资源

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

×
发表于 2016-8-16 15:03:59 | 显示全部楼层
本帖最后由 h20040606 于 2016-8-16 15:11 编辑

回复 1# heroxianf


    autoit的数组是从0 开始的。$row的循环有问题啊。检查 24行开始的循环 (1)应当UBound($ProdArray, 2) - 1 (2)为什么$Row+1
#include <Excel.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)

For $Row = 0 To UBound($ProdArray, 2) - 1
        Local $aArray1 = StringRegExp($ProdArray[3][$Row], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[3][$Row], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[3][$Row], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 And $b >= 0 And $c > 0
                        MsgBox(0, '', $ProdArray[3][$Row] & '        ' & '结果是: 符合')
        EndSelect
Next
_Excel_BookClose($oWorkbook, 0)
_Excel_Close($oExcel)
 楼主| 发表于 2016-8-16 15:32:30 | 显示全部楼层
回复 2# h20040606

在整理原有表格没有去掉  原有表格第一行不是数据,所以加1处理了一下。我试试。
 楼主| 发表于 2016-8-16 15:44:53 | 显示全部楼层
谢谢指明数组问题,这样修改  测试用例可以正常运行了。接着折腾下一步了。

   
#include <Excel_new.au3>
#include <Array.au3>
#include <File.au3>

Local $oData1 = '姓名'
Local $oData2 = '身份证'
Local $oData3 = '诈骗'
Local $FileName = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel, $FileName) ;打開EXCEL表

With $oWorkbook.ActiveSheet ;worksheets("")
        $ProdArray = .range("a1").currentregion.value

        For $n = 0 To UBound($ProdArray) - 1
                For $i = 0 To UBound($ProdArray, 2) - 1
                        $ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
                Next
        Next

EndWith
_ArrayDisplay($ProdArray)
MsgBox(0, '', $ProdArray[3][0])

For $Row = 0 To UBound($ProdArray, 2) - 1
        Local $aArray1 = StringRegExp($ProdArray[3][$Row], $oData1, 3)
        Local $aArray2 = StringRegExp($ProdArray[3][$Row], $oData2, 3)
        Local $aArray3 = StringRegExp($ProdArray[3][$Row], $oData3, 3)
        Local $a = UBound($aArray1)
        Local $b = UBound($aArray2)
        Local $c = UBound($aArray3)

        Select
                Case $a >= 0 and $b >= 0 and $c > 0
                        MsgBox(0, '', $ProdArray[3][$Row] & '        ' & '结果是: 符合', 1)
        EndSelect
Next

MsgBox(0, '', 'Over')
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 22:44 , Processed in 0.078800 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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