Я пытаюсь сделать конвертирующий скрипт, но я застрял с циклами

У меня нет образования в создании сценариев, но я попытался создать 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
Другие вопросы по тегам