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

  • 本文关键字:脚本 返回 CSV 即使 autoit
  • 更新时间 :
  • 英文 :


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

现在,它的设置方式是,我有一个Avaya脚本来获取快速报告并将其导出为我的Autoit脚本使用的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

姓名列表.csv

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

报告.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,

测试!它适用于提供的文件(复制它们并按照脚本命名它们)

请注意以下事项

  • _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
#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

相关内容

  • 没有找到相关文章

最新更新