-1

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

现在,它的设置方式是我有一个 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,
4

2 回答 2

1

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

请注意以下事项

  • _ParseCsv() 已被重写添加参数,如 $Dchar 作为分隔符等(见脚本)
  • 请注意我如何在文件中找到名称(您可以轻松添加功能来扩展搜索,但它不会是必要的)
  • msgboxes 用于解释目的;如果不再需要它们,请将它们注释掉
  • 不需要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
于 2013-12-14T20:33:08.963 回答
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
于 2013-11-10T11:25:01.767 回答