View previous topic :: View next topic |
Author |
Message |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Thu Nov 29, 2012 19:15 Post subject: Замена фрагментов в выделенных файлах на счетчик |
|
|
Здравствуйте.
Необходимо заменить определенные фрагменты в выделенном html и txt файле(файлах), на цифровые, - с увеличением по счетчику.
Например, в тексте тега (html) - идет фрагмент files/75139331.jpg, files/47156449.jpg и множество подобных.
Если в качестве поиска, использовать схему с регулярными выражениями, - то она будет выглядеть так:
А в качестве замены, - нужно получить:
в первом попавшемся значении - files/001.jpg
во втором попавшемся значении - files/002.jpg и т.д до конца файла.
Желательно, для каждого файла - свой счетчик.
на всякий случай - вот сам файл
Надеюсь на помощь.
P.s проблема с одним файлом, была решена с помощью скрипта SearchReplace.js - действующего внутри AkelPad. Но если будет решение, сразу для нескольких файлов, без открытия в AkelPad - буду признателен.
Нашлось и решение с помощью Textpipe, но тоже, как позже выяснилось, - не полное ...
Так что вопрос пока открыт. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 13:15 Post subject: |
|
|
shveicar wrote: | files/002.jpg и т.д до конца файла | А счётчик расти должен влево или вправо? 011 или 0011 ? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 14:20 Post subject: |
|
|
Flasher
Спасибо - что откликнулись.
Счетчик пусть растет влево,- до максимала (999). |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 17:14 Post subject: |
|
|
shveicar
В файле (кот. по непонятной причине дважды упакован и ещё в b64 завёрнут) в строке, где встречается указанное вхождение, есть ещё аналогичные названия с префиксом prev. Что с этим делать?
И, кстати, зачем нули спереди? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 17:34 Post subject: |
|
|
Quote: | Что с этим делать? |
Так этот фрагмент, не имеет отношения к цифровой маске - или скрипт подразумевает обработку только под фрагмент с примером?
По идее - должно быть что то похожее на действие скрипта SearchReplace.js в программе AkeiPad с параметром поиска
и замены на
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 17:43 Post subject: |
|
|
shveicar wrote: | Так этот фрагмент, не имеет отношения к цифровой маске - или скрипт подразумевает обработку только под фрагмент с примером? | Т.е. файлы типа 72744083prev.jpg в папке будут присутсвовать, а f72744083.jpg не будут? Где логика? И о каком примере речь?
shveicar wrote: | и замены на | Это код js со своими приблудами.
shveicar wrote: | В принципе, - это не критично | Тогда советую не усложнять то, что и так не просто делается.
Я до того как посмотрел на файл вообще не думал, что в строке будет куча требуемых вхождений, да ещё и в единственной. Т.е. найденную строку ещё разбивать на подстроки придётся. Получается двойной счётчик, с учётом того, что таких строк может быть несколько... _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 18:19 Post subject: |
|
|
Quote: | Т.е. файлы типа 72744083prev.jpg в папке будут присутсвовать, а f72744083.jpg не будут? |
Пример - в файле по ссылке. Будут присутствовать и те и другие, - просто сначала обрабатываются файлы вида - переименовываются на счетчик.
А после, повторным применением скрипта - второй волной, идет обработка,
уже со своим счетчиком, но по тому же сценарию.
Если делать все сразу - то счетчик будет идти не по порядку, поскольку изображения 72744083prev.jpg это миниатюрное производное из f72744083.jpg
Quote: | Тогда советую не усложнять то, что и так не просто делается. | Конечно, Вам видней. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 21:11 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 21:31 Post subject: |
|
|
С первого раза все срабатывает, вот если окошко ещё добавить с запросом на фрагменты, а то каждый паз в кнопку лезть, не совсем удобно.
Quote: | Хотелось изящества |
Да и так все нормально получилось, - остальные части, потом, без проблем можно поменять и в textpipe.
Большое Спасибо. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 21:40 Post subject: |
|
|
shveicar wrote: | С первого раза все срабатывает, вот если окошко ещё добавить с запросом на фрагменты, а то каждый паз в кнопку лезть, не совсем удобно. | Это ж как надо разбираться в регулярках, чтобы вот так за секунды вставлять в каждое окно необходимое выражение без ошибок?
Это ещё с учётом того, что в синтаксисе для каждого языка/программы есть свои нюансы и тонкости. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 21:45 Post subject: |
|
|
Quote: | Это ж как надо разбираться в регулярках, |
Ну естественно, с простыми выражениями, - а более сложные нужно в тестовом прогоне проверять, - а то такое можно наворотить  |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 22:15 Post subject: |
|
|
Как угодно. Поменять 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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Dec 02, 2012 22:46 Post subject: |
|
|
Странно, стал выдавать ошибку - строка 19 символ 1
Если правильно понял, то в поле всплывающих окон, значения добавляются в кавычках, как было в кнопке? или кавычки не нужны, хотя ошибка идет - так или иначе. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 02, 2012 22:54 Post subject: |
|
|
Забыл про сам список (%WL), поправил.
Кавычки - нет, не нужны. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Mon Dec 03, 2012 00:06 Post subject: |
|
|
Теперь процесс - пошел, только многие файлы суммируются, то есть идет сложение содержимого вот несколько файлов с этими фрагментами(до применения скрипта)... |
|
Back to top |
|
 |
|
|
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
|