在两个文件中匹配数据,然后向每个人发送电子邮件



为简单起见,file1.txt是一个日志文件,我将其logonIds提取到数组中。File2.txt包含登录ID,电子邮件地址,其他,不必要的数据行

我需要从文件 1 读取到我的数组中的所有登录 ID,并从文件 2 中提取它们的电子邮件地址。获得此信息后,我可以向 file1 中的每个人发送电子邮件。不能只使用 file2.txt因为它包含不应接收电子邮件的用户。

我编写了 vbscript,它将 logonID 从 file1.txt 提取到数组中,并从 file2 中提取登录 ID 和电子邮件.txt

inFile1 = "C:Scriptstestvbswscreatestatus.txt"
inFile2 = "C:ScriptstestvbsWSBatchCreateBuildsList.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objInFile1 = objFSO.OpenTextFile(inFile1, ForReading)
Set objInFile2 = objFSO.OpenTextFile(inFile2, ForReading)
'Creates Array of all DomainIDs for successful deployments
Do Until objInFile1.AtEndOfStream 
    strNextLine = objInFile1.Readline
    arrLogons = Split(strNextLine , vbTab)
        If arrLogons(0) = "DEPLOYSUCCESS" Then
             arrUserIDList = arrUserIDList & arrLogons(5) & vbCrLf
        End If  
Loop
Do Until objInFile2.AtEndOfStream 
    strNextLine = objInFile2.Readline
    arrAddressList = Split(strNextLine , ",")
    arrMailList = arrMailList & arrAddressList(0) & vbTab & arrAddressList(1) & vbCrLf
Loop

接下来我需要做的是获取我的用户ID列表"arrUserIDList",并从arrMailList中提取他们的电子邮件地址。 有了这些信息,我可以向file1.txt(wscreatestatus.txt)中的每个用户发送电子邮件。

谢谢!

从您构建arrMailList的方式来看,我假设您希望将选定的 LogonID 和相应的电子邮件地址输出到新的制表符分隔文本文件中。

如果是这种情况,我建议使用 ArrayList 对象来存储值。ArrayLists有一个易于使用的Add方法,为了测试一个项目是否在ArrayList中,有Contains方法。

在代码中:

Option Explicit
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim inFile1, inFile2, outFile, objFSO, objInFile, objOutFile
Dim strNextLine, fields, arrUserIDList, arrMailList
inFile1 = "C:Scriptstestvbswscreatestatus.txt"
inFile2 = "C:ScriptstestvbsWSBatchCreateBuildsList.txt"
outFile = "C:ScriptstestvbsWSEmailDeploySuccess.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInFile = objFSO.OpenTextFile(inFile1, ForReading)
'Create an ArrayList of all DomainIDs for successful deployments
Set arrUserIDList = CreateObject( "System.Collections.ArrayList" )
Do Until objInFile.AtEndOfStream
    strNextLine = objInFile.Readline
    fields = Split(strNextLine , vbTab)
    If fields(0) = "DEPLOYSUCCESS" Then
         arrUserIDList.Add fields(5)
    End If
Loop
'close the first input file
objInFile.Close
'Now read the second file and read the logonID's from it
Set objInFile = objFSO.OpenTextFile(inFile2, ForReading)
'Create an ArrayList of all LogonID's, a TAB character and the EmailAddress
Set arrMailList = CreateObject( "System.Collections.ArrayList" )
Do Until objInFile.AtEndOfStream
    strNextLine = objInFile.Readline
    fields = Split(strNextLine , ",")
    If arrUserIDList.Contains(fields(0)) Then
        ' store the values in arrMailList as TAB separated values
        arrMailList.Add fields(0) & vbTab & fields(1)
    End If
Loop
'close the file and destroy the object
objInFile.Close
Set objInFile = Nothing
Set objOutFile = objFSO.OpenTextFile(outFile, ForWriting, True)
For Each strNextLine In arrMailList
    objOutFile.WriteLine(strNextLine)
Next
'close the file and destroy the object
objOutFile.Close
Set objOutFile = Nothing
'clean up the other objects
Set objFSO = Nothing
Set arrUserIDList = Nothing
Set arrMailList = Nothing

希望有帮助

这就是我解决问题的方式,但我认为西奥采取了更好的方法。

Const ForReading = 1
Const ForWriting = 2
Dim inFile1, inFile2, strNextLine, arrServiceList, arrUserList
Dim arrUserDeployList, strLine, arrList, outFile, strItem1, strItem2
inFile1 = Wscript.Arguments.Item(0) 'wscreatestatus.txt file (tab delimited)
inFile2 = Wscript.Arguments.Item(1) 'WSBatchCreateBuildsList.txt (comma delimited)
outFile = Wscript.Arguments.Item(2) 'SuccessWSMailList###.txt (for Welcome emails)
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objInFile1 = objFSO.OpenTextFile(inFile1, ForReading)
Set objInFile2 = objFSO.OpenTextFile(inFile2, ForReading)
Set objOutFile = objFSO.CreateTextFile(outFile, ForWriting, True)
'Extracts Logon ID's for successfull deployments into an Array
'#================================================================
i = 0
Do Until objInFile1.AtEndOfStream 
    ReDim Preserve arrUsers(i)
        strNextLine = objInFile1.Readline
        arrLogons = Split(strNextLine , vbTab)
            If arrLogons(0) = "PENDINGREQUESTS" Then
                arrUsers(i) = arrLogons(5)
                i = i + 1
            End If  
    Loop
'Extracts success deploy email addresses and writes to file
'#================================================================
Do Until objInFile2.AtEndOfStream 
    ReDim Preserve arrMailList(i)
    strNextLine = objInFile2.Readline
        arrAddressList = Split(strNextLine , ",")
        strItem1 = arrAddressList(0)
        strItem2 = arrAddressList(1)
            For Each strArrayEntry In arrUsers
                If strArrayEntry = strItem1 Then 
                     objOutFile.WriteLine strItem1 & "," & strItem2 
                End If
            Next
    i = i + 1
    Loop
objOutFile.Close
objInFile1.Close
objInFile2.Close

相关内容

最新更新