ReplaceByRegular

ReplaceByRegular - Замена текста через регулярные выражения во множестве файлов 1.12

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
=======================================
ReplaceByRegular by Dragokas
=======================================

- Скрипт для замены текста во множестве файлов согласно регулярным выражениям.

Состав:
Regular.txt - список замен
ReplaceByRegular.vbs - сам скрипт
Readme.txt - этот файл.


Как пользоваться?

1)
Копируете файл Regular.txt и ReplaceByRegular.vbs
в папку, где нужно рекурсивно (с подкаталогами) провести замены текста.

Текст может быть в кодировках:
- ANSI
- UTF-8

2)
Откройте Regular.txt (должен лежать рядом со скриптом).
Создайте перечень замен вида:

word1=Что ищем1
word2=Чем заменяем1
word1=Что ищем2
word2=Чем заменяем2

где каждому word1= соостветствует word2=, который под ним находится.
Так, Вы можете сделать одновременно несколько разных замен.

word1= принимает для поиска регулярное выражение (писать после знака равенства).
word2= принимает текст, на который будет произведена замена части, найденной регуляркой, указанной в word1=

3) Запускаем скрипт ReplaceByRegular.vbs

Отчет о заменах будет создан в виде файла Replace - log.log рядом со скриптом.

--------------
Настройки
--------------

1) Список расширений

Скрипт обрабатывает только файлы с расширениями, список которых указан в его шапке.
Правый клик по файлу ReplaceByRegular.vbs -> "Изменить"
Смотрим сюда (строка 5):

Dim Exts: Exts = "htm;html;txt"

2) Замена с учетом регистра букв.
Если Вы хотите включить учёт регистра при поиске по регулярному выражению:
Правый клик по файлу ReplaceByRegular.vbs -> "Изменить"
Смотрим сюда (строка 11):

Dim IgnoreCase: IgnoreCase = true

и меняем true на false


---------------

В word1 действуют некоторые правила экранирования. Так:

\\ будет заменен на \
\^ будет заменен на ^
\$ будет заменен на $
\* будет заменен на *
\+ будет заменен на +
\? будет заменен на ?
\. будет заменен на .
\| будет заменен на |
\n будет заменен на новую строку
\r будет заменен на перевод каретки
\t будет заменен на знак табуляции

Также есть 2 специальные замены:

1)

$$$file$$$ будет заменено на имя файла (+ расширение имени), в котором найдена искомая фраза.

Например, если файл назывался my.txt
а шаблоны такие:
word1=\<a href="default\.htm"\>
word2=<a href="$$$file$$$">

то
<a href="default.htm">
будет заменено на:
<a href="my.txt">

2)

\@{{{utf8toANSI}}}

означает, что искомая фраза будет перекодирована из кодировки utf-8 в ANSI,
где \@ - это подстановка искомой фразы.


Например, имеем текст в utf-8:
<title>Привет, regist</title>

После применения шаблона:
word1=<title>[^<]*</title>
word2="\@"{{{utf8toANSI}}}

Результат будет ANSI-строка (в кавычках):
"<title>Привет, regist</title>"

3)

\@{{{ANSItoUTF8}}}

означает, что искомая фраза будет перекодирована из кодировки ANSI в utf-8,
где \@ - это подстановка искомой фразы.

Например, имеем текст в ANSI:
<title>Привет, regist</title>

После применения шаблона:
word1=<title>[^<]*</title>
word2="\@"{{{ANSItoUTF8}}}

Результат будет UTF-8 строка (в кавычках):
"<title>Привет, regist</title>"

Обратите внимание, метка BOM автоматически не добавляется.
Некоторые редакторы могут неверно распознать исходный формат текстового файла.


P.S. "Я не люблю писать любые виды документации" (© Boban Spasic), но конкретно ЭТУ меня заставил написать regist и я ему это припомню :)
Вообщем, спасибо ему за разминку мозгов, по причине которой и родился этот скрипт.

Скрипт сподвигнул написать regist.
 

Вложения

Последнее редактирование:

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,397
Реакции
5,988
Баллы
998
2) Замена с учетом регистра букв.
Если Вы хотите отключить учет регистра при поиске по регулярному выражению:
лучше по умолчанию отключи учёт регистра букв. Посоветовал скрипт на другом форуме, так отработал не с первого раза из-за того, что title заглавными буквами был написан.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Готово.
 
  • Like
Реакции: E100

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Обновлено до v1.8.2
Добавлен шаблон \@{{{ANSItoUTF8}}} - замена кодировки фразы поиска с ANSI на UTF-8.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Пользователь Dragokas разместил новый ресурс:

ReplaceByRegular - Замена текста через регулярные выражения во множестве файлов

=======================================
ReplaceByRegular by Dragokas
=======================================

- Скрипт для замены текста во множестве файлов согласно регулярным выражениям.

Состав:
Regular.txt - список замен
ReplaceByRegular.vbs - сам скрипт
Readme.txt - этот файл.

Как пользоваться?

1)
Копируете файл Regular.txt и ReplaceByRegular.vbs
в папку, где нужно рекурсивно (с подкаталогами) провести замены текста.

Текст может быть в кодировках:
- ANSI
- UTF-8

2)...
Узнать больше об этом ресурсе...
 
  • Like
Реакции: akok

akok

Команда форума
Администратор
Сообщения
17,958
Реакции
13,567
Баллы
2,203
А есть возможность добавить GUI?
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,397
Реакции
5,988
Баллы
998
и превратить простенький VBS скрипт который правишь на свой вкус в непонятный .exe на который ещё будут ругаться антивирусы.
akok, ты хоть пользовался им?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
akok, можно, но я не сильно люблю клепать интерфейсы, даже простенькие, и это уже будет не скрипт, а программа.
Если сильно нужно, то сделаю альтернативу.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,397
Реакции
5,988
Баллы
998
Если сильно нужно
для того чтобы было сильно нужно, надо этим пользоваться. А подозреваю, что это просто была хотелка, что неплохо прикрутить такую свистелку возможно другим она будет нужна.
А если пользоваться, то там всё очень удобно.
 

akok

Команда форума
Администратор
Сообщения
17,958
Реакции
13,567
Баллы
2,203
А подозреваю, что это просто была хотелка, что неплохо прикрутить такую свистелку возможно другим она будет нужна.
А если пользоваться, то там всё очень удобно.
Хотелка. Просто посмотри на ситуацию обычного обывателя, им удобнее через интерфейс, обычные юзеры скриптов как огня боятся. А так да, возни много + возможные детекты... если сложно, то пусть будет как есть.
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,397
Реакции
5,988
Баллы
998
akok,
1) Обычному пользователю который боится скриптов как огня этот скрипт не нужен (ни в виде скрипта ни в виде .exe).
2) Скрипт проверен на практике и мной и другими пользователями и оказался очень удобным. Собственно он и родился из практической задачи.
Так что это надуманная хотелка на практике не нужна, а минусы имеет.
возможные детекты
не возможные, а гарантированные. Прога по поведению ведь похожа на шифратор. И детекты на подобные утилиты есть даже на широко и давно используемые.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Dragokas обновил(а) ресурс ReplaceByRegular новой записью:

Обновления

1.9
Добавлена поддержка формата UTF-16LE с BOM (определяется автоматически)
Добавлена возможность задавать путь к файлу (или папке для обработки файлов) в качестве аргумента командной строки - cscript.exe ReplaceByRegular.vbs "путь"
Узнать больше об этом обновлении...
 

Alex1983

Разработчик
Сообщения
922
Реакции
444
Баллы
488
При использование вышло эта ошибка
Как можно исправить.
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Привет.
Попробуй сейчас.
 

Alex1983

Разработчик
Сообщения
922
Реакции
444
Баллы
488
Отработало. Но маленько не так.
На входе

Код:
word1=Byte
word2=Bytee
word1=Int16
word2=Int1616
word1=Int32
word2=Int3232
word1=Int64
word2=Int6464

получаю
Код:
extern const Byteeeeeeeeeeeeee k7zSignature[k7zSignatureSize];
const Byte *Data;
UInt3232323232323232323232323232323232323232323232323232 MethodID;
Byte NumStreams;
UInt32 NumCoders;
и так далее.
Я просто хочу исходник от 7z маленько тип данных поменять

Пример вот это
typedef unsigned char Byte;
typedef short Int16;
typedef unsigned short UInt16;

#ifdef _LZMA_UINT32_IS_ULONG
typedef long Int32;
typedef unsigned long UInt32;
#else
typedef int Int32;
typedef unsigned int UInt32;
#endif

#ifdef _SZ_NO_INT_64

/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
NOTES: Some code will work incorrectly in that case! */

typedef long Int64;
typedef unsigned long UInt64;

#else

#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef __int64 Int64;
typedef unsigned __int64 UInt64;

#else
typedef long long int Int64;
typedef unsigned long long int UInt64;

#endif

#endif

#ifdef _LZMA_NO_SYSTEM_SIZE_T
typedef UInt32 SizeT;
на это
typedef unsigned char Bytee;
typedef short Int1616;
typedef unsigned short UInt1616;

#ifdef _LZMA_UINT32_IS_ULONG
typedef long Int3232;
typedef unsigned long UInt3232;
#else
typedef int Int3232;
typedef unsigned int UInt3232;
#endif

#ifdef _SZ_NO_INT_64

/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
NOTES: Some code will work incorrectly in that case! */

typedef long Int6464;
typedef unsigned long UInt6464;

#else

#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef __int64 Int6464;
typedef unsigned __int64 UInt6464;
#define UINT64_CONST(n) n
#else
typedef long long int Int6464;
typedef unsigned long long int UInt6464;
#define UINT64_CONST(n) n ## ULL
#endif

#endif

#ifdef _LZMA_NO_SYSTEM_SIZE_T
typedef UInt3232 SizeT;
и так в каждом файле.
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Модель движка замен изначально была спроектирована неправильно.
Благо, легко исправляется.
Проверяй.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
ЗЫ. Добавил фичу, чтобы в логе замен отображался порядковаый номер символа, где найдена фраза.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
@Alex1983, не торопись. Пришлось делать кое-какие перерасчёты, чтобы правильно вычислить индексы для замен.

Вот новая версия, и должно быть последняя.
+ здесь в отчёте формируется уже не индекс символа, а № строки, в которой найдена фраза.

Да, ещё, не забудь в скрипте отключить игнорирование регистра символов (и соответственно, регулярку тоже правильно составь с учётом этого), а то при компиляции на C++ начнутся проблемы.

// Часть сообщений перенесена в тему: https://safezone.cc/threads/reguljarnoe-vyrazhenie-dlja-zameny-tipov-dannyx.30864/
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Dragokas обновил(а) ресурс ReplaceByRegular новой записью:

Обновление

1.12
Исправлена ошибка в движке замены (при некоторых условиях могли происходить двойные замены)
Добавлен вывод в лог замен номера строки, в которой найдена фраза.
Узнать больше об этом обновлении...
 
Сверху Снизу