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 

Замена фрагментов в выделенных файлах на счетчик
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Nov 29, 2012 19:15    Post subject: Замена фрагментов в выделенных файлах на счетчик Reply with quote

Здравствуйте.
Необходимо заменить определенные фрагменты в выделенном html и txt файле(файлах), на цифровые, - с увеличением по счетчику.
Например, в тексте тега (html) - идет фрагмент files/75139331.jpg, files/47156449.jpg и множество подобных.
Если в качестве поиска, использовать схему с регулярными выражениями, - то она будет выглядеть так:
Code:
   
files/([0-9]+).jpg

А в качестве замены, - нужно получить:
в первом попавшемся значении - files/001.jpg
во втором попавшемся значении - files/002.jpg и т.д до конца файла.
Желательно, для каждого файла - свой счетчик.
на всякий случай - вот сам файл
Надеюсь на помощь.

P.s проблема с одним файлом, была решена с помощью скрипта SearchReplace.js - действующего внутри AkelPad. Но если будет решение, сразу для нескольких файлов, без открытия в AkelPad - буду признателен.
Нашлось и решение с помощью Textpipe, но тоже, как позже выяснилось, - не полное Sad ...
Так что вопрос пока открыт.
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 13:15    Post subject: Reply with quote

shveicar wrote:
files/002.jpg и т.д до конца файла
А счётчик расти должен влево или вправо? 011 или 0011 ?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 14:20    Post subject: Reply with quote

Flasher
Спасибо - что откликнулись.
Счетчик пусть растет влево,- до максимала (999).
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 17:14    Post subject: Reply with quote

shveicar
В файле (кот. по непонятной причине дважды упакован и ещё в b64 завёрнут) в строке, где встречается указанное вхождение, есть ещё аналогичные названия с префиксом prev. Что с этим делать?
И, кстати, зачем нули спереди?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 17:34    Post subject: Reply with quote

Quote:
Что с этим делать?

Так этот фрагмент, не имеет отношения к цифровой маске - или скрипт подразумевает обработку только под фрагмент с примером?
По идее - должно быть что то похожее на действие скрипта SearchReplace.js в программе AkeiPad с параметром поиска
Code:
files/([0-9]+).jpg
и замены на
Code:
var f = arguments.callee; var i = f.i || 0; f.i = ++i; return "files/photo_" + "000".substr(String(i).length) + i + ".jpg";

То есть, вместо диапазона фрагмента заданного в поиске, - можно подставить свой фрагмент со счетчиком.
Quote:
И, кстати, зачем нули спереди?

В принципе, - это не критично, главное чтобы это цифровое значение было уникальным, - а файлы, всегда можно под него и потом переименовать. Если для сценария такой формат не удобен, - можно взять другой, - главное чтобы счетчик шёл по порядку.
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 17:43    Post subject: Reply with quote

shveicar wrote:
Так этот фрагмент, не имеет отношения к цифровой маске - или скрипт подразумевает обработку только под фрагмент с примером?
Т.е. файлы типа 72744083prev.jpg в папке будут присутсвовать, а f72744083.jpg не будут? Где логика? И о каком примере речь?

shveicar wrote:
и замены на
Это код js со своими приблудами.

shveicar wrote:
В принципе, - это не критично
Тогда советую не усложнять то, что и так не просто делается.
Я до того как посмотрел на файл вообще не думал, что в строке будет куча требуемых вхождений, да ещё и в единственной. Т.е. найденную строку ещё разбивать на подстроки придётся. Получается двойной счётчик, с учётом того, что таких строк может быть несколько...
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 18:19    Post subject: Reply with quote

Quote:
Т.е. файлы типа 72744083prev.jpg в папке будут присутсвовать, а f72744083.jpg не будут?

Пример - в файле по ссылке. Будут присутствовать и те и другие, - просто сначала обрабатываются файлы вида
Code:
f72744083.jpg
- переименовываются на счетчик.
А после, повторным применением скрипта - второй волной, идет обработка,
Code:
72744083prev.jpg

уже со своим счетчиком, но по тому же сценарию.
Если делать все сразу - то счетчик будет идти не по порядку, поскольку изображения 72744083prev.jpg это миниатюрное производное из f72744083.jpg
Quote:
Тогда советую не усложнять то, что и так не просто делается.
Конечно, Вам видней.
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: 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
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 21:31    Post subject: Reply with quote

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

Да и так все нормально получилось, - остальные части, потом, без проблем можно поменять и в textpipe.
Большое Спасибо.
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 21:40    Post subject: Reply with quote

shveicar wrote:
С первого раза все срабатывает, вот если окошко ещё добавить с запросом на фрагменты, а то каждый паз в кнопку лезть, не совсем удобно.
Это ж как надо разбираться в регулярках, чтобы вот так за секунды вставлять в каждое окно необходимое выражение без ошибок? Smile
Это ещё с учётом того, что в синтаксисе для каждого языка/программы есть свои нюансы и тонкости.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 21:45    Post subject: Reply with quote

Quote:
Это ж как надо разбираться в регулярках,

Ну естественно, с простыми выражениями, - а более сложные нужно в тестовом прогоне проверять, - а то такое можно наворотить Wink
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 22:15    Post subject: Reply with quote

Как угодно. Поменять
Code:
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
на
Code:
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0)
End With : L = vbNewLine

IBox Before, "начальную", L : IBox Middle, "заменяемую", L : IBox After, "завершающую", L
Sub IBox(Name, NStr, NL)
  Name = InputBox(NL&NL&NL&NL&"Введите " & NStr & " искомую часть строки:",_
  "Замена текста в строках выбр. файлов на основе RegExp")
  If Trim(Name) = "" Then Wscript.Quit
End Sub

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


Last edited by Flasher on Sun Dec 02, 2012 23:06; edited 3 times in total
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Dec 02, 2012 22:46    Post subject: Reply with quote

Quote:
Поменять

Странно, стал выдавать ошибку - строка 19 символ 1
Если правильно понял, то в поле всплывающих окон, значения добавляются в кавычках, как было в кнопке? или кавычки не нужны, хотя ошибка идет - так или иначе.
Back to top
View user's profile Send private message  
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 02, 2012 22:54    Post subject: Reply with quote

Забыл про сам список (%WL), поправил.
Кавычки - нет, не нужны.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message  
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Mon Dec 03, 2012 00:06    Post subject: Reply with quote

Теперь процесс - пошел, только многие файлы суммируются, то есть идет сложение содержимого Shocked вот несколько файлов с этими фрагментами(до применения скрипта)...
Back to top
View user's profile Send private message  
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group