View previous topic :: View next topic |
Author |
Message |
Slide
Joined: 26 Sep 2006 Posts: 4
|
(Separately) Posted: Tue Sep 26, 2006 00:38 Post subject: Копировать путь файла и обрабатывать рег. выражением, можно? |
|
|
Часто приходиться копировать пути файлов c сервера. Получается что-то типа: ftp://website.ru/dir/file.jpg
А если через http обращаться к этому файлу, то путь совершенно другой. Типа: http://dir2.websiete.ru/mydir/dir/file.jpg
А мне как раз необходимо пути http вида использовать. Причем не одного файла, а несколько. И каждый раз ручками муторно исправлять все это.
Подскажитье, плиз, как возможно эту проблемку решить? Возможно копировать путь, а потом его регулярным выражением обрабатывать (лишнее удалять, а свое подставлять) и выдавать? Или какой плагин может есть для этого решения? |
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Tue Sep 26, 2006 11:21 Post subject: |
|
|
Скриптами стопудово можно. Но для того, чтобы правильный скрипт написать, нужно точно знать схему, по которой изменяется путь. Я, к примеру, из приведённого примера не очень понял что на что менять. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Sep 26, 2006 11:30 Post subject: |
|
|
Накидал тут небольшой vbs-скриптик. Только я совсем не разбираюсь в регулярных выражениях. Кто разбирается, тот пусть правит скрипт под себя.
Code: | '===========================================================================
' Обработка буфера обмена регулярными выражениями
'===========================================================================
Option Explicit
Dim TCS, Clip, REx, Arr, A, i
Set TCS = CreateObject("TCScript.Helper")
Set REx = New RegExp
Clip = TCS.GetTextFromClip
Arr = Split(Clip, vbNewLine, -1, 1)
i = 0
For Each A In Arr
REx.Pattern = "(ftp://)"
A = REx.Replace(A, "http://dir2.")
REx.Pattern = "(\.ru/)"
A = REx.Replace(A, ".ru/mydir/")
Arr(i) = A
i = i + 1
Next
Clip = Join(Arr, vbNewLine)
'MsgBox(Clip)
TCS.SetTextToClip(Clip)
Set TCS = Nothing
WScript.Quit |
Для работы скрипта нужен ScriptHelper.
Скрипт обрабатывает буфер обмена (там уже лежат пути) и меняет его по заданным в скрипте условиям.
Кстати, без применения скриптов можно использовать любой текстовый редактор, поддерживающий замену регулярными выражениями. Так что, уж "ручками" совсем не за чем исправлять. |
|
Back to top |
|
|
Slide
Joined: 26 Sep 2006 Posts: 4
|
(Separately) Posted: Tue Sep 26, 2006 13:50 Post subject: |
|
|
Batya wrote: | Накидал тут небольшой vbs-скриптик. |
Batya, огромное спасибо, все отлично работает! Я даже и не знал про ScriptHelper.
Batya wrote: | Скрипт обрабатывает буфер обмена (там уже лежат пути) и меняет его по заданным в скрипте условиям. |
Вот такой еще вопрос. А возможно оба условия на одну кнопку прикрутить. Копирование путей и затем сразу обработка буфера скриптом? Или возможно в этом скрипте запрос сразу на определение путей сделать и обработку? Пытаюсь сейчас добиться этого в скрипте, но пока в поиске...
Batya wrote: | Кстати, без применения скриптов можно использовать любой текстовый редактор, поддерживающий замену регулярными выражениями. Так что, уж "ручками" совсем не за чем исправлять. | Все верно, токлько я сразу хотель все по-уму сделать |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Sep 26, 2006 15:21 Post subject: |
|
|
Slide wrote: | Вот такой еще вопрос. А возможно оба условия на одну кнопку прикрутить. Копирование путей и затем сразу обработка буфера скриптом? Или возможно в этом скрипте запрос сразу на определение путей сделать и обработку? Пытаюсь сейчас добиться этого в скрипте, но пока в поиске... |
Все просто.
Перед
Code: | Clip = TCS.GetTextFromClip |
напиши
Code: | TCS.SendCommand "cm_CopyFullNamesToClip" |
или
Code: | TCS.SendCommand "cm_CopyNetNamesToClip" |
|
|
Back to top |
|
|
Slide
Joined: 26 Sep 2006 Posts: 4
|
(Separately) Posted: Tue Sep 26, 2006 16:22 Post subject: |
|
|
Batya, спасибо еще раз.
Я его по другому победил. Добавил команду возврата массива имен выделенных файлов из скрипта "GetSrcSelectedFiles( -1)", и привязал на кнопку.
Code: | '===========================================================================
' Обработка буфера обмена регулярными выражениями
'===========================================================================
Option Explicit
Dim TCS, Clip, REx, Arr, A, i
Set TCS = CreateObject("TCScript.Helper")
Set REx = New RegExp
' Получаем список выделенных файлов
Arr = TCS.GetSrcSelectedFiles( -1)
i = 0
For Each A In Arr
REx.Pattern = "(ftp://)"
A = REx.Replace(A, "http://dir2.")
REx.Pattern = "(\.ru/)"
A = REx.Replace(A, ".ru/mydir/")
Arr(i) = A
i = i + 1
Next
Clip = Join(Arr, vbNewLine)
'MsgBox(Clip)
TCS.SetTextToClip(Clip)
Set TCS = Nothing
WScript.Quit |
Все раборает как часы. А я столько мучился. Большой респект! |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Sep 26, 2006 17:36 Post subject: |
|
|
Slide wrote: | Я его по другому победил. Добавил команду возврата массива имен выделенных файлов из скрипта "GetSrcSelectedFiles( -1)", и привязал на кнопку. |
Можно и так. Просто Volniy (автор ScriptHelper) макросом GetSrcSelectedFiles скорее всего делает сохранение буфера, затем толкает команду TC на сохранение имен в буфер, затем читает имена из буфера в массив, а потом восстанавливает старый буфер. Об этом говорит и комментарий из ReadMe.txt:
Quote: | Внимание! На данный момент макросы используют команды,
связанные с буфером обмена и могут удалять нетекстовое
содержимое в нем (с текстом вроде уже проблем нет) |
Т.о. я предложил упрощеннный вариант описанного макроса (тебе же всё-равно надо менять буфер). Но, повторюсь, можно также, как и ты сделал. |
|
Back to top |
|
|
Slide
Joined: 26 Sep 2006 Posts: 4
|
(Separately) Posted: Tue Sep 26, 2006 18:17 Post subject: |
|
|
Batya wrote: |
Можно и так. Просто Volniy (автор ScriptHelper) макросом GetSrcSelectedFiles скорее всего делает сохранение буфера, затем толкает команду TC на сохранение имен в буфер, затем читает имена из буфера в массив, а потом восстанавливает старый буфер. Об этом говорит и комментарий из ReadMe.txt...
Т.о. я предложил упрощеннный вариант описанного макроса (тебе же всё-равно надо менять буфер). Но, повторюсь, можно также, как и ты сделал. |
Ок, спасибо за разъяснение, буду знать, чем проще, тем оно завсегда надежнее. А предупреждение я видать проглядел. |
|
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
|