Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar я200110_изменения.vbs.rar
(2.2 Kb, 4 просмотров)

maxim43g,
Проще всего в имеющийся скрипт внедрить функцию, отключив при этом ручной ввод сообщения
Изменения отметил красным цветом
Пропишите свой путь к файлу с списком дней рождения
Отладочную выдачу надо удалить
Полностью Ваш скрипт не тестировал - только кусок
Код: Выделить весь код
...................................
...................................
...................................
Option Explicit  
Const ADS_SCOPE_SUBTREE = 2 
...................................
...................................
...................................
strMessage = GetBirthDay("Z:\Box_In\birthday.txt")
If strMessage = "" Then Wscript.Quit

MsgBox "Отладка !!!!" + vbcrlf + strMessage

On Error Resume Next 
...................................
...................................
...................................

'''''''''' 'Asks the user to type the message

''''''''''strMessage = InputBox("Type the message to be sent to network computer(s)","Messenger Service", strMessage)
''''''''''If strMessage = "" Then
''''''''''	Wscript.Echo "Operation canceled by the user"
''''''''''	Wscript.Quit
''''''''''End If 

...................................
...................................
...................................
End Function

Function GetBirthDay(FileIn)
    Dim arrAlls
    Dim strBirth
    Dim intSpace
    Dim datBirth
    
    GetBirthDay = ""
    On Error Resume Next
    
    With CreateObject("Scripting.FileSystemObject").OpenTextFile(FileIn, 1, False)
        If Err.Number <> 0 Then
            Wscript.Echo "File   " + FileIn + vbCrLf + Err.Description + "(" + CStr(Err.Number) + ")"
            On Error GoTo 0
            Exit Function
        End If
        On Error GoTo 0
        arrAlls = Split(.ReadAll, vbCrLf)
        .Close
    End With
    For Each strBirth In arrAlls
        strBirth = Trim(strBirth)
        If strBirth <> "" Then
            intSpace = InStr(1, strBirth, " ")
            If intSpace > 0 Then
                datBirth = Left(strBirth, intSpace - 1)
                If IsDate(datBirth) Then
                    datBirth = CDate(datBirth)
                    If Month(Date) = Month(datBirth) And Day(Date) = Day(datBirth) Then
'                        GetBirthDay = GetBirthDay + vbCrLf + Mid(strBirth, intSpace + 1)
                        GetBirthDay = GetBirthDay + vbCrLf + strBirth
                    End If
                End If
            End If
        End If
    Next
    If GetBirthDay <> "" Then GetBirthDay = "С днём рождения!" + GetBirthDay
End Function
Тестировал на тексте
Код: Выделить весь код
15.06.1955 Василий Иванович Пендилюкин

10/01/1900 Дмитрий Донской
jasgjsahg sajaskh lkjsaljl

7.10.1952 Путин Владимир Владимирович
10.01.1600 Чингиз Хан
14.06.1946 Трамп Дональд Фредерикович
Не знаю, как команда msg отреагирует на наличие символов CrLf dв сообщении - я их сделал, чтобы выделить каждого поздравляемого отдельной строкой при совпадении дат дней рождения. При проблемах - заменить
strMessage
на, например,
Replace(strMessage,vbCrLf," === ")
при написании метода Run,
либо при вызове функции
strMessage = Replace(GetBirthDay("Z:\Box_In\birthday.txt"),vbCrLf," === ")

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:55, 10-01-2020 | #6