Сопоставьте данные в двух файлах и отправьте электронное письмо каждому человеку - PullRequest
0 голосов
/ 22 декабря 2018

Для простоты file1.txt - это файл журнала, для которого я извлекаю logonIds в массив.File2.txt содержит строки logonID, emailAddress, другие, ненужные, данные

Мне нужно взять все logonID, считанные в мой массив из файла file1, и извлечь их адреса электронной почты из файла file2.Получив эту информацию, я могу отправить каждому человеку в файле1 электронное письмо.Не могу просто использовать file2.txt, потому что он содержит пользователей, которые не должны получать электронную почту.

Я написал vbscript, который извлекает logonID из file1.txt в массив и извлекает logonID и электронную почту из file2.txt

inFile1 = "C:\Scripts\testvbs\wscreatestatus.txt"
inFile2 = "C:\Scripts\testvbs\WSBatchCreateBuildsList.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

Что мне нужно сделать дальше, это взять мой список идентификаторов пользователей "arrUserIDList" и извлечь их адрес электронной почты из arrMailList.С этой информацией я могу отправить каждому пользователю в file1.txt (wscreatestatus.txt) электронное письмо.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Вот как я решил свою проблему, но я думаю, что Тео выбрал лучший подход.

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
0 голосов
/ 10 января 2019

Исходя из того, как вы создаете 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:\Scripts\testvbs\wscreatestatus.txt"
inFile2 = "C:\Scripts\testvbs\WSBatchCreateBuildsList.txt"
outFile = "C:\Scripts\testvbs\WSEmailDeploySuccess.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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...