VBS множественное ЗАМЕНА использования - PullRequest
0 голосов
/ 09 мая 2018

Я сделал logEditor для своего журнала RSYNC, его задача - заменить строки состояния в сгенерированном файле журнала и создать отредактированную новую для конечного пользователя. Для этого я использую метод REPLACE им VBS. Все работает хорошо, за исключением одной проблемы, которую я до сих пор не могу решить.

Когда я использую REPLACE несколько раз, тогда требуется только первая замена использования, записывает его в файл и игнорирует другие. Но мне нужно использовать заменить несколько раз, чтобы заменить несколько статусов

Function logEditor(strInputFile, strLogFileName)
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strInputFile, ForReading)
strText = objFile.ReadAll
objFile.Close

'replaceOfStatus
strNewText1 = Replace(strText, "cd+++++++++", "CDir")
'this one is going to be ignored
strNewText2 = Replace(strText, "<f+++++++++", "FILE")

Set objFile = objFSO.OpenTextFile(strLogFileName, ForWriting)
objFile.WriteLine strNewText1 'writed one
objFile.WriteLine strNewText2 'ignored one
objFile.Close
End Function
call logEditor(strInputFile, strLogFileName)

Это образец журнала rsync

2018/04/27 12:29:40 [792] .d..t...... texlive/
2018/04/27 12:33:31 [792] cd+++++++++ texlive/Downloads/
2018/04/27 12:33:31 [792] <f+++++++++ texlive/Downloads/Backup.zip
2018/04/27 12:33:32 [792] <f+++++++++ texlive/Downloads/ChromeSetup.exe
2018/04/27 12:33:43 [792] <f+++++++++ texlive/Downloads/test.txt
2018/04/27 12:33:43 [792] <f+++++++++ texlive/Downloads/desktop.ini

Не могли бы вы, ребята, помочь мне и скажите, где у меня плохая логика?

Заранее спасибо за все ответы.

EDIT_0: В конце этого метода мне нужно, чтобы новый файл журнала выглядел так:

2018/04/27 12:29:40 [792] Dir texlive/
2018/04/27 12:33:31 [792] CDir texlive/Downloads/
2018/04/27 12:33:31 [792] File texlive/Downloads/Backup.zip
2018/04/27 12:33:32 [792] File texlive/Downloads/ChromeSetup.exe
2018/04/27 12:33:43 [792] File texlive/Downloads/test.txt
2018/04/27 12:33:43 [792] File texlive/Downloads/desktop.ini

1 Ответ

0 голосов
/ 09 мая 2018
Function logEditor(strInputFile, strLogFileName)
    Const ForReading = 1
    Const ForWriting = 2

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strInputFile, ForReading)
    strText = objFile.ReadAll
    objFile.Close

    'replaceOfStatus
    strNewText1 = Replace(strText, "cd+++++++++", "CDir")
    'this one is going to be ignored
    strNewText2 = Replace(strNewText1, "<f+++++++++", "FILE") 'USE THE MODIFIED strNewText1 STRING 

    Set objFile = objFSO.OpenTextFile(strLogFileName, ForWriting, True)
'   objFile.WriteLine strNewText1 'writed one YOU DONT NEED THIS LINE
    objFile.Write strNewText2 'ignored one HERE THE ENTIRE FILE IS BEING WRITTEN
    objFile.Close
End Function

Пара изменений

  1. Поскольку вы хотите выполнить множественную замену - вам нужно сделать это кумулятивно - как сначала заменить CD ++, а затем использовать эту измененную строку для замены

  2. После того, как замены сделаны, просто запишите окончательную строку в файл

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