Я пытаюсь сделать конвертирующий скрипт, но я застрял с циклами
У меня нет образования в создании сценариев, но я попытался создать VBScript на основе идей, которые я нашел в Интернете. Моя цель - включить
[00:15:63] ки [00:16:09] е [00:16:36] RU
в
[00: 15,63] ки<00:16,09>е<00:16,36>RU
в строке для каждого текстового файла в папке.
В настоящее время я пытаюсь использовать цикл строка за строкой, чтобы получить первую часть в обычных скобках. Однако, если я не записываю данные до их зацикливания, я получаю только последнюю строку. Но я не могу читать и писать одновременно. Повторение tFile для чтения сбрасывает цикл. Что я должен делать? Это текущий код для него прямо сейчас (где мне не хватает нового набора для переменной tFile после первого цикла):
'Strings for text values
strEXT = "txt"
Set objFolder = objFilesystem.GetFolder(SubFolder)
Set objFiles = objFolder.Files
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "(\d{2}):(\d{2}):(\d{2})"
strCount = 0
strCount2 = 0
'Parse each file and perform replacements
For Each objFile In objFiles
If Right(LCase(objFile.Name), 3) = strEXT Then
strCount = strCount + 1
Set tFile = objFile.OpenAsTextStream(ForReading, TriStateUseDefault)
do until tFile.atEndOfStream
strNextLine = tFile.ReadLine
If Len(strNextLine) > 0 Then
strLeft = Left(strNextLine, 10)
strRight = Mid(strNextLine, 11)
End If
strRight = Replace(strRight, "]", ">") ' ] to >
strRight = Replace(strRight, "[", "<") ' [ to <
strLeft = objRegEx.Replace _
(strLeft, "$1:$2.$3") ':xx: to :xx.
strRight = objRegEx.Replace _
(strRight, "$1:$2.$3") ':xx: to :xx.
tFile.Close
Set tFile = objFile.OpenAsTextStream(ForWriting, TriStateUseDefault)
tFile.Write strLeft
tFile.Write strRight
tFile.Close
loop
tFile.Close
end if
Next
1 ответ
По совету Tim3880 я записал данные в отдельный временный файл в цикле и впоследствии переместил временный файл обратно в исходный файл, перезаписав его. Таким образом, я избегал чтения и записи одного и того же файла или перезапускал цикл снова и снова. Вот окончательный код для этой конкретной проблемы:
'Strings for text values
strEXT = "txt"
Set objFolder = objFilesystem.GetFolder(SubFolder)
Set objFiles = objFolder.Files
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "(\d{2}):(\d{2}):(\d{2})"
strCount = 0
strCount2 = 0
'Parse each file and perform replacements
For Each objFile In objFiles
If Right(LCase(objFile.Name), 3) = strEXT Then
strCount = strCount + 1
Set tFile = objFile.OpenAsTextStream(ForReading, TriStateUseDefault)
strTemp = "c:\log.txt"
Set TempFile = objFilesystem.GetFile(strTemp)
Set tFile2 = TempFile.OpenAsTextStream(8,-2)
do until tFile.atEndOfStream
strNextLine = tFile.ReadLine
If Len(strNextLine) > 0 Then
strLeft = Left(strNextLine, 10)
strRight = Mid(strNextLine, 11)
End If
strRight = Replace(strRight, "]", ">") ' ] to >
strRight = Replace(strRight, "[", "<") ' [ to <
strLeft = objRegEx.Replace _
(strLeft, "$1:$2.$3") ':xx: to :xx.
strRight = objRegEx.Replace _
(strRight, "$1:$2.$3") ':xx: to :xx.
tFile2.Write strLeft & strRight & vbCrlf 'write per line
loop
tFile.Close
tFile2.Close
objFilesystem.CopyFile strTemp,objFile,true 'overwrite old file
Set tFile2 = TempFile.OpenAsTextStream(2,-2)
tFile2.Write ""
tFile2.Close
End If
Next