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 

Копировать путь файла и обрабатывать рег. выражением, можно?

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Slide



Joined: 26 Sep 2006
Posts: 4

Post (Separately) Posted: Tue Sep 26, 2006 00:38    Post subject: Копировать путь файла и обрабатывать рег. выражением, можно? Reply with quote

Часто приходиться копировать пути файлов c сервера. Получается что-то типа: ftp://website.ru/dir/file.jpg
А если через http обращаться к этому файлу, то путь совершенно другой. Типа: http://dir2.websiete.ru/mydir/dir/file.jpg
А мне как раз необходимо пути http вида использовать. Причем не одного файла, а несколько. И каждый раз ручками муторно исправлять все это.
Подскажитье, плиз, как возможно эту проблемку решить? Возможно копировать путь, а потом его регулярным выражением обрабатывать (лишнее удалять, а свое подставлять) и выдавать? Или какой плагин может есть для этого решения?
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Tue Sep 26, 2006 11:21    Post subject: Reply with quote

Скриптами стопудово можно. Но для того, чтобы правильный скрипт написать, нужно точно знать схему, по которой изменяется путь. Я, к примеру, из приведённого примера не очень понял что на что менять.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Sep 26, 2006 11:30    Post subject: Reply with quote

Накидал тут небольшой 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
View user's profile Send private message
Slide



Joined: 26 Sep 2006
Posts: 4

Post (Separately) Posted: Tue Sep 26, 2006 13:50    Post subject: Reply with quote

Batya wrote:
Накидал тут небольшой vbs-скриптик.

Batya, огромное спасибо, все отлично работает! Laughing Я даже и не знал про ScriptHelper.

Batya wrote:
Скрипт обрабатывает буфер обмена (там уже лежат пути) и меняет его по заданным в скрипте условиям.

Вот такой еще вопрос. А возможно оба условия на одну кнопку прикрутить. Копирование путей и затем сразу обработка буфера скриптом? Или возможно в этом скрипте запрос сразу на определение путей сделать и обработку? Пытаюсь сейчас добиться этого в скрипте, но пока в поиске...

Batya wrote:
Кстати, без применения скриптов можно использовать любой текстовый редактор, поддерживающий замену регулярными выражениями. Так что, уж "ручками" совсем не за чем исправлять.
Все верно, токлько я сразу хотель все по-уму сделать Wink
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Sep 26, 2006 15:21    Post subject: Reply with quote

Slide wrote:
Вот такой еще вопрос. А возможно оба условия на одну кнопку прикрутить. Копирование путей и затем сразу обработка буфера скриптом? Или возможно в этом скрипте запрос сразу на определение путей сделать и обработку? Пытаюсь сейчас добиться этого в скрипте, но пока в поиске...

Все просто.
Перед
Code:
Clip    = TCS.GetTextFromClip

напиши
Code:
TCS.SendCommand "cm_CopyFullNamesToClip"

или
Code:
TCS.SendCommand "cm_CopyNetNamesToClip"
Back to top
View user's profile Send private message
Slide



Joined: 26 Sep 2006
Posts: 4

Post (Separately) Posted: Tue Sep 26, 2006 16:22    Post subject: Reply with quote

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
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Sep 26, 2006 17:36    Post subject: Reply with quote

Slide wrote:
Я его по другому победил. Добавил команду возврата массива имен выделенных файлов из скрипта "GetSrcSelectedFiles( -1)", и привязал на кнопку.

Можно и так. Просто Volniy (автор ScriptHelper) макросом GetSrcSelectedFiles скорее всего делает сохранение буфера, затем толкает команду TC на сохранение имен в буфер, затем читает имена из буфера в массив, а потом восстанавливает старый буфер. Об этом говорит и комментарий из ReadMe.txt:
Quote:
Внимание! На данный момент макросы используют команды,
связанные с буфером обмена и могут удалять нетекстовое
содержимое в нем (с текстом вроде уже проблем нет)

Т.о. я предложил упрощеннный вариант описанного макроса (тебе же всё-равно надо менять буфер). Но, повторюсь, можно также, как и ты сделал.
Back to top
View user's profile Send private message
Slide



Joined: 26 Sep 2006
Posts: 4

Post (Separately) Posted: Tue Sep 26, 2006 18:17    Post subject: Reply with quote

Batya wrote:

Можно и так. Просто Volniy (автор ScriptHelper) макросом GetSrcSelectedFiles скорее всего делает сохранение буфера, затем толкает команду TC на сохранение имен в буфер, затем читает имена из буфера в массив, а потом восстанавливает старый буфер. Об этом говорит и комментарий из ReadMe.txt...

Т.о. я предложил упрощеннный вариант описанного макроса (тебе же всё-равно надо менять буфер). Но, повторюсь, можно также, как и ты сделал.


Ок, спасибо за разъяснение, буду знать, чем проще, тем оно завсегда надежнее. А предупреждение я видать проглядел.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
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