自动二维阵列计数数量

时间:2015-06-30 05:52:05

标签: autoit

我想计算5列中具有相同值/数据的单位数量。我尝试使用For - Next循环。但是当数据较大且200行时它有问题。 下面是一些数据示例:

Row,Col 0,Col 1,Col 2,Col 3,Col 4,Col 5
[0],6/29/2015,ABC,FVT,Battery failed,Soldering Process Issue,Battery Cold Solder
[1],6/29/2015,ABC,FVT,Battery failed,Incoming Material Issue,Battery Defective
[2],6/27/2015,ABC,FVT,Battery failed,Incoming Material Issue,Battery Defective
[3],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Defective
[4],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Defective
[5],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Defective
[6],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Defective
[15],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Low Batt <60%
[16],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Low Batt <60%
[17],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Low Batt <60%
[18],6/29/2015,DEF,FVT,Power_Management_IC failed,Soldering Process Issue,Battery Solder Bridge
[19],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Broken
[20],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Broken
[21],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Circuitry line Open - VSN
[22],6/29/2015,ABC,FVT,BI failed,Assembling Process Issue,BI Wirebus Damage
[23],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Damage
[24],6/26/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Damage
[25],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Short - (GND & VSP)
[26],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Short - (GND & VSP)
[27],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Short - (IOM & VSP)

通缉数据进入:

Row,Col 0,Col 1,Col 2,Col 3,Col 4,Col 5,Qty
[0],6/26/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Damage,1
[1],6/27/2015,ABC,FVT,Battery failed,Incoming Material Issue,Battery Defective,1
[2],6/29/2015,ABC,FVT,Battery failed,Incoming Material Issue,Battery Defective,1
[3],6/29/2015,ABC,FVT,Battery failed,Soldering Process Issue,Battery Cold Solder,1
[4],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Defective,4
[5],6/29/2015,DEF,FVT,Battery failed,Incoming Material Issue,Battery Low Batt <60%,3
[6],6/29/2015,DEF,FVT,Power_Management_IC failed,Soldering Process Issue,Battery Solder Bridge,1
[7],6/29/2015,ABC,FVT,BI failed,Assembling Process Issue,BI Wirebus Damage,1
[8],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Broken,2
[9],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Circuitry line Open - VSN,1
[10],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Damage,1
[11],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Short - (GND & VSP),2
[12],6/29/2015,ABC,FVT,BI failed,Soldering Process Issue,BI Wirebus Short - (IOM & VSP),1

下面是循环自动脚本:

_ArrayDisplay($Finding,"Finding Data")
$fSymUnique = _ArrayUnique($Finding,3)
$fModelUnique = _ArrayUnique($Finding,1)
$fAnalyUnique = _ArrayUnique($Finding,4)
$fDefectUnique = _ArrayUnique($Finding,5)
Dim $aFinding[UBound($Finding)][7]
$i = -1
For $a = 1 To UBound($fModelUnique)-1
    ;$i = $i+1
    For $b = 1 To UBound($fSymUnique)-1
        ;$i = $i+1
        For $e = 1 To UBound($fAnalyUnique)-1
            ;$i = $i+1
            For $c = 1 To UBound($fDefectUnique)-1
                $i = $i+1
                For $d = 0 To UBound($Finding)-1
                    $1 = StringCompare($fModelUnique[$a],$Finding[$d][3])
                    $2 = StringCompare($fSymUnique[$b],$Finding[$d][3])
                    $3 = StringCompare($fDefectUnique[$c],$Finding[$d][5])
                    $4 = StringCompare($Date1,$Finding[$d][0])
                    $5 = StringCompare($fAnalyUnique[$e],$Finding[$e][4])
                    ;$Sum = $1+$2+$3+$4
                    If $1 = 0 And $2 = 0 And $3 = 0 And $4 = 0 And $5 = 0 Then
                        ReDim $aFinding[$i+1][7]
                        $aFinding[$i][0] = $i
                        $aFinding[$i][4] = $Finding[$d][5]
                        $aFinding[$i][2] = $Finding[$d][2]
                        $aFinding[$i][3] = $Finding[$d][3]
                        $aFinding[$i][4] = $Finding[$d][4]
                        $aFinding[$i][5] = $Finding[$d][5]
                        $aFinding[$i][6] = $aFinding[$i][6]+1
                    EndIf
                Next
            Next
        Next
    Next
Next

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

#include <MsgBoxConstants.au3>
#include <Array.au3>

Global $result_A[1][2]

Example()

Func Example()
    Local $lines_A = FileReadToArray(@ScriptDir & '\ArrayCount.txt')
    If @error Then
        MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error) ; An error occurred reading the current script file.
    Else
        For $i = 0 To UBound($lines_A) - 1 ; Loop through the array.
            $index = _ArraySearch($result_A, $lines_A[$i])
            If $index = -1 Then
                _ArrayAdd($result_A, $lines_A[$i] & '|1')
            Else
                $result_A[$index][1] += 1
            EndIf
        Next
    EndIf
    _ArrayDisplay($result_A)
EndFunc   ;==>Example