即使CSV源不为空,我的脚本也会返回0

时间:2013-11-09 19:25:29

标签: autoit

我正在制作一个小程序来告诉我目前通过AvayaCMS报告打了多少员工。

现在,它的设置方式是我有一个Avaya脚本来快速报告并将其导出为我的自动脚本使用的CSV。

在调试方面,我觉得我错过了一些东西,需要另一套眼睛。 启动Staffing.au3会触发我正在使用的CSV脚本对报告。即使拥有完全相同的数据,我的消息框仍会报告“0”

#include <Array.au3>
#include <CSV.au3>
$i_AgentCount = AvayaData(@ScriptDir & '\Report.csv', @ScriptDir & '\Name List.csv')
MsgBox(0x40, "", $i_AgentCount)
Func AvayaData($s_ReportSource, $s_NameList)

$av_LiveData = _ParseCSV($s_ReportSource)
If @error Then Return -1

$av_NameList = _ParseCSV($s_NameList)
If @error Then Return -1

Local $i_AgentCount = 0

For $i_RowCnt = 1 To (UBound($av_LiveData, 1) - 1) Step +1

    For $i_AgtLst = 1 To (UBound($av_NameList) - 1) Step +1

        If StringStripWS($av_LiveData[$i_RowCnt][1], 3) = StringStripWS($av_NameList[$i_AgtLst][0], 3) Then

            $i_AgentCount += 1

        EndIf

    Next

Next

;Return the Agent Count
Return $i_AgentCount

EndFunc

名称List.csv

 Agent Name
"Doe, Jane"
"Doe, John"

Report.csv

,Agent Name,Login ID,Extn,AUX Reason,State,Split/Skill,Time,VDN Name
5,"Doe, John",5930001,1000001,7,AUXOUT,999,51:32:00,
2,"Doe, Jane",5930002,1000002,7,AUXOUT,999,52:32:00,

2 个答案:

答案 0 :(得分:1)

测试!它与提供的文件运行良好(复制它们并在脚本中命名)

请注意以下内容

  • _ParseCsv()已被重写添加参数,如$ Dchar作为分隔符等(参见脚本)
  • 请注意我如何在文件中找到名称(您可以轻松添加功能以扩展搜索但不会是必要的)
  • msgbox用于说明目的;如果不再需要它们,请将它们评论出来
  • 不需要array.au3

和代码:

$i_AgentCount = AvayaData(@ScriptDir & '\Report.csv', @ScriptDir & '\Name List.csv')
MsgBox(0x40, "", $i_AgentCount)
Func AvayaData($s_ReportSource, $s_NameList)


 $av_LiveData = _ParseCSV($s_ReportSource,",","oops...",True)
 If @error Then Return -1

 $av_NameList = _ParseCSV($s_NameList,",","oops: 2",True)
 If @error Then Return -1

 MsgBox(0,default,"$av_NameList (Number of lines) -> " & $av_NameList[0][0])
 MsgBox(0,default,"$av_NameList (Number of data in each line) -> " & $av_NameList[0][1])

  MsgBox(0,default,"$av_LiveData (Number of lines) -> " & $av_LiveData[0][0])
 MsgBox(0,default,"$av_LiveData (Number of data in each line) -> " & $av_LiveData[0][1])

  Local $i_AgentCount = 0
for $i = 1 to $av_NameList[0][0] Step 1


For $j= 1 To $av_LiveData[0][0] Step 1

   ;we can have  names from $av_NameList as well from $av_LiveData but in Live Data 2nd abd 3rd values are the names
   MsgBox(0,default,$av_NameList[$i][1] & $av_NameList[$i][2] & " <------------> " & $av_LiveData[$j][2] & $av_LiveData[$j][3])

   ;~   let's compare them if matched with any of the liveData lines
  If StringCompare($av_NameList[$i][1] & $av_NameList[$i][2],$av_LiveData[$j][2] & $av_LiveData[$j][3]) == 0 Then 
     $i_AgentCount += 1
     MsgBox(0,default,"Match found: counter: " & $i_AgentCount)
   EndIf     
Next   
 Next   

;Return the Agent Count
Return $i_AgentCount

 EndFunc

 Func _ParseCSV($f,$Dchar,$error,$skip)

    Local $array[500][500]
    Local $line = ""

     $i = 0
    $file = FileOpen($f,0)
     If $file = -1 Then
   MsgBox(0, "Error", $error)
   Return False
    EndIf

   ;skip 1st line (since it is the header)
   If $skip Then $line = FileReadLine($file)

 While 1
 $i = $i + 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
   ;skip 1st line
      $row_array = StringSplit($line,$Dchar)
      If $i == 1 Then $row_size = UBound($row_array) 
      If $row_size <> UBound($row_array) Then  MsgBox(0, "Error", "Row: " & $i & " has different size ")
      $row_size = UBound($row_array)
      $array = _arrayAdd_2d($array,$i,$row_array,$row_size)

WEnd
FileClose($file)
$array[0][0] = $i-1 ;stores number of lines
$array[0][1] = $row_size -1  ; stores number of data in a row (data corresponding to    index 0 is the number of data in a row actually that's way the -1)
Return $array

EndFunc
Func _arrayAdd_2d($array,$inwhich,$row_array,$row_size)
  For $i=1 To $row_size -1 Step 1
  $array[$inwhich][$i] = $row_array[$i]
 Next
Return $array
EndFunc

答案 1 :(得分:0)

#region    ;************ Includes ************
#include "csv.au3"
#include <Array.au3>
#endregion    ;************ Includes ************
$i_AgentCount = AvayaData(@ScriptDir & '\Report.csv', @ScriptDir & '\Name List.csv')
MsgBox(0x40, "", $i_AgentCount)

Func AvayaData($s_ReportSource, $s_NameList)
    Local $i_AgentCount = 0
    Local $s = FileRead($s_NameList)
    Local $loggedInNames = FileRead($s_ReportSource)

    $av_NameList = _ParseCSV($s_NameList)
    If @error Then Return -1
;~  _ArrayDisplay($av_NameList)

    ConsoleWrite($s & @CRLF)

    For $i = 1 To UBound($av_NameList) - 1
        ConsoleWrite($i & " " & $av_NameList[$i][0] & @CRLF)
        If StringInStr($s, $av_NameList[$i][0]) <> 0 Then
            $i_AgentCount += 1
        EndIf
    Next
    Return $i_AgentCount
EndFunc   ;==>AvayaData