Замена кусков текста в выделенных файлах

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Скрипт, интерфейс очень понравился! Сразу же стал экспериментировать на 40 файлах в которых давно хотел один текст заменить другим, но жалко было время. Скрипт сработал отлично!!! Вот несколько наблюдений и коментариев
1. Окно с тестом вылетает очень огромное, я даже не сразу догадался что где-то внизу есть кнопка OK. Это окно статично закрывает почти весь экран.
2. Пришлось 80 раз жать на ENTER
- В связи с этим можно ли сделать параметр, где была бы возможность не показывать это окно? текст, который показывается, я и так прекрасно знаю...
- Взамен показа окна можно ввести вывод окна или запись в тестовый файл - Файл\Окно-отчёта. В каком файле в какой строке была произведена замена... Количество замен в файле, во всех файлах
- И можно ввести пункт создания бэкапа и отката
Если и показывать окно, то не весь текст, а только часть, там где найден нужный текст и в каких строках...
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Andrey_A писал(а):Окно с тестом вылетает очень огромное, я даже не сразу догадался что где-то внизу есть кнопка OK
Этого окна быть вообще не должно, оно было для отладки, забыл убрать. Сейчас всё исправлено.
Andrey_A писал(а): И можно ввести пункт создания бэкапа и отката
Насчет отката - честно говоря не очень хочется делать, а простой бекап можно.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Центровка теперь должна работать правильно при любой высоте таскбара.
Тогда ничего не пойму..
Loopback писал(а):Ctrl+Enter добавил.
Спасибо. Кнопка ОК активировалась также. :)
Loopback писал(а):Насчет отката - честно говоря не очень хочется делать, а простой бекап можно.
Только с параметром. Он далеко не всегда нужен.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Rodny писал(а):По идее, должны же быть какие-нибудь ini-специфические функции.
Ага, есть такие. :wink:
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Обновил пост. Добавил простенький бэкап, включается галкой внизу окна.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Просьба остальных отписать по части центровки по высоте.
У меня даже расстояние от вызванного таскбара до окна меньше, чем от верха окна до края экрана, не говоря уж о независимой от таскбара центровки.

Loopback
Добавь в комментарий к пункту 2 информацию о значении 0, а то некоторые такую классную фичу проморгают. :wink:
И название заголовка сменить не забудь.
Аватара пользователя
Lev
Сообщения: 392
Зарегистрирован: Ср мар 02, 2005 16:34

Сообщение Lev »

Ну, в порядке баловства накидал скриптик.
Обработку папок не приделывал.
Заодно будете WSO осваивать :)

Код: Выделить всё

'replaceinfiles.vbs
'Lev

'Параметры вызова (почему-то у меня без wscript.exe барахлит %S)
'wscript.exe "Диск:\Путь к скрипту\replaceinfiles.vbs"
'%P%S


Dim ts
Set args = WScript.Arguments

On Error Resume Next
Dim wso
Set wso = CreateObject("Scripting.WindowSystemObject")
If Err.Number <> 0 Then
	Msgbox "Пожалуйста установите WindowSystemObject!" & vbCrLf & "Вы можете загрузить WSO с http://www.veretennikov.org/WSO/default.aspx"
	WScript.Quit 1
End If
On Error GoTo 0

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim re
Set re = New RegExp

Dim form0
Set form0 = wso.CreateForm(0, 0, 394, 288)
With form0
  .Text = "Заменялка"
  .CenterControl()
End With

WScript.ConnectObject form0, "form0_"
Set label1 = form0.TextRect(10, 10, 55, 25, "Найти:")
Set edit2 = form0.CreateEdit(70, 10, 310, 100, wso.Translate("ES_MULTILINE"))
Set label3 = form0.TextRect(10, 115, 55, 25, "Заменить")
Set edit4 = form0.CreateEdit(70, 115, 310, 100, wso.Translate("ES_MULTILINE"))
Set button5 = form0.CreateButton(305, 220, 75, 25, "Поехали")
WScript.ConnectObject button5, "button5_"

form0.Show()
wso.Run()

Function button5_OnClick(Sender)
    re.IgnoreCase = True
    re.Global = True
    re.Multiline = True
      
    re.Pattern = "([.\\()/|[^$+*\]<>{}?])"'экранируем спецсимволы, может какие забыл, может лишние вписал
    pt=re.Replace(edit2.Text, "\$1")
    re.Pattern = pt
  For Each f In args 
    If fso.GetFile(f).Size<>0 Then
      s12 = fso.GetBaseName(f) & ".bak" 
      fso.CopyFile f, s12 
      Set ts = fso.GetFile(f).OpenAsTextStream(1, 0) 
      st=ts.ReadAll 
      ts.Close 
      Set ts = fso.GetFile(f).OpenAsTextStream(2, 0) 
      ts.Write(re.Replace(st, edit4.Text)) 
      ts.Close 
     End If
  Next
  MsgBox "Готово"
End Function

Set wso = Nothing
Set fso = Nothing
Set re = Nothing

'Generated with Lev's VBS pack for HiAsm, www.hiasm.com
Последний раз редактировалось Lev Чт окт 07, 2010 15:12, всего редактировалось 2 раза.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Lev Скрипт выдаёт ошибку

Код: Выделить всё

Сценарий:	C:\Total Commander Image\Scripts\TextWork\FileBuffer.vbs
Строка:	54
Символ:	35
Ошибка:	Предполагается наличие инструкции
Код:	800A0400
Источник: 	Ошибка компиляции Microsoft VBScript
а что касается au3 - супер! Единственное при 0 выходит окошко с цифрами, оно само небольшое, а название окна длинное, я бы его заменил на "Выбор к-ва полей поиска" - влазит и понятно...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A писал(а):а название окна длинное, я бы его заменил на "Выбор к-ва полей поиска" - влазит и понятно.
Мой предыдущий пост снизу видел? Найди те строки в скрипте по Ctrl+F и замени, делов-то. :wink:
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Flasher писал(а):Ага, есть такие.
Да-да, вот как раз про эту я и говорил: "народ построчно файлы перебирает" :wink:
Ну, на данный момент методы INIReadSection, INIWriteSection из Helper-а позволяют свести это всё к паре строчек, спасибо Volniy.
Аватара пользователя
Lev
Сообщения: 392
Зарегистрирован: Ср мар 02, 2005 16:34

Сообщение Lev »

Поправил, в последний момент вписал проверку на пустой файл и не запустил тестирования, а в vbs оказалось GoTo не работает :)
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Lev скрипт выдаёт следующее:

Код: Выделить всё

Please install WindowSystemObject!
You can download WSO from http://cs.usu.edu.ru/home/abv/
адрес у меня не отвечает. Подскажи нормальную ссылку, где можно было бы скачать то, что нужно для этого скрипта
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Есть такое волшебное слово "гуглЬ". :mrgreen: Install (архив, help_rus).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

В общем-то, скрипт Loopback уже доведён до ума и, как мне кажется, удался не на шутку. Я бы, конечно, мог ещё нагрузить всякими примочками, но, полагаю, на этом достаточно, пусть остальное будет само по себе, как отдельная реализация. Получился полезнейший инструмент! По системе Top Gear место ему в морозильном сейфе! Изображение
Что тут ещё скажешь, большое человеческоеИзображение
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Присоединяюсь,Loopback, большое спасибо за скрипт!!!
Flasher отдельная благодарность за ссылки. Пол ночи искал скачивал всё что связано с WSO, накачал бог знает что, а тут оказалось .dll - всё работает!!! :D
Ответить