Множественное использование REPLACE в VBS

Я сделал 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

person Troll Penguin    schedule 09.05.2018    source источник


Ответы (1)


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. Since you want to do multiple replace - you need to make that happen cumulatively - like first replace CD++ and then use that modified string to replace

  2. Once the replacements are made, just write the final string to the file

person Pankaj Jaju    schedule 09.05.2018
comment
Но мне нужно заменить несколько статусов, потому что человек, читающий журнал, понятия не имеет, что означает CD***/F**/другие. Всего мне нужно заменить около 30 статусов. - person Troll Penguin; 09.05.2018
comment
Теперь ваш вопрос немного отличается от исходного вопроса. В оригинале вы сказали, что изменился только первый статус, а не другие. Я предоставил настройку алгоритма для этого. - person Pankaj Jaju; 09.05.2018