Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Замена фрагментов в выделенных файлах на счетчик 
Author Message
Flasher



PostPosted: Sun Dec 02, 2012 21:11    Post subject: Reply with quote

shveicar
Хотелось изящества вроде приведённого выше кода, но так и не вышло. Сделал по старинке: сплиттингом и стандартной склейкой.

Code:
'==============================================================================
' Замена в сроках выделенных файлов части внутри заданного текстового диапазона
' на соответствующий вхождению номер с помощью регулярных выражений
'
' Параметры: %WL {начальная часть} {заменяемая часть} {завершающая часть}

' Пример:    %WL "files/" "([0-9]+)" "\.jpg"

' Автор: Flasher ©
'==============================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : Before = .Item(1) : Middle = .Item(2) : After = .Item(3)
End With : L = vbNewLine
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If F > vbNullString Then
    If FSO.FileExists(F) Then
      i = 0 : Text = "" : Str = "" : Full = "" : Set T = FSO.OpenTextFile(F)
      Do While Not T.AtEndOfStream
        Str = Trim(T.ReadLine)
        With New RegExp
          .IgnoreCase = True : .Global = True : .Pattern = Before & Middle & After
          If .Test(Str) Then
            C = .Execute(Str).Count
            If C > 1 Then
              Str = .Replace(Str, Before & L & Replace(After, "\", ""))
              For Each FStr in Split(Str, L)
                i = i + 1 : If i < 10 Then i = "00" & i
                If i > 9 And i < 100 Then i = "0" & i
                Full = Full & FStr & i
              Next : Str = Mid(Full, 1, Len(Full) - Len(i))
            ElseIf C = 1 Then
              i = i + 1 : If i < 10 Then i = "00" & i : If i > 9 And i < 100 Then i = "0" & i
              Str = .Replace(Str, Before & i & Replace(After, "\", ""))
            End If
          End If
        End With : Text = Text & L & Str
      Loop : T.Close : Set T = Nothing : FSO.OpenTextFile(F, 2).Write Mid(Text, 3)
    End If
  End If
Next : Set FSO = Nothing : WScript.Quit

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Mon Dec 03, 2012 00:47; edited 2 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group