Сложный поиск с заменой

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

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

torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сложный поиск с заменой

Сообщение torygmile »

Здравствуйте.
Возможно ли в ТС сделать поиск с заменой, чтобы при помощи регулярных выражений найти группу символов по типу xyz***abc в первом текстовом файле и заменить ими во втором xyz***abc? Т.е. группа символов с одного файла должна заменять группу символов в другом при совпадении начала и конца группы. Маска при этом должна быть и для изменяющихся символов (***) и для одинаковой подгруппы (abc), т.к. групп символов несколько тысяч.

Приведу пример, в первом файле есть группы символов
om/jrqa0dj9fceq/FRONT
om/h8f3m5hqrgbx/Chin
om/mypjlei4bnvv/DAIL

а заменить их надо на группы из второго файла
om/1916470106/FRONT
om/4574sg7647/Chin
om/5645rg4654/DAIL

И таких групп символов несколько тысяч...
Последний раз редактировалось torygmile Чт авг 18, 2011 05:26, всего редактировалось 2 раза.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Если есть точное соответствие начала и конца строк, то можно легко и без регекспов обойтись. А под точным соответствием в данном случае можно понимать наличие в каждой строке двух обрамляющих символов, например, "/" вместе с близлежащими символами.

Вопросы:
1) А есть такие строки, где окончания совпадают, а префиксы - нет?
2) Почему речь идёт о началах и концах групп, а не строк? Примеры этот момент не проясняют.
Последний раз редактировалось Flasher Чт авг 18, 2011 02:35, всего редактировалось 1 раз.
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

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

Сообщение Flasher »

Если нет, то достаточно находить строки с одинаковым окончанием и заменять в исправляемом файле строку на строку из другого файла. Или есть какой-то подвох?
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

Все верно, но заменять не строку а группу символов по маске (с одинаковым началом и концом).
Т.е. несколько тысяч групп символов с одного файла должны заменить соответствующие по маске в другом.
И конец у каждой группы символов различен, совпадает только с группой в другом файле.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Я не понимаю, зачем заменять группу символов, а не строк целиком, если строки в начале и в конце совпадают?
И зачем одинаковое начала проверять, если только что было подтверждено, что строк с одинаковым окончанием, но с разным концом нет?
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

Нет, я с самого начала писал что есть одинаковая подгруппа символов в начале каждой группы, но группа не обязательно начинается с начала строки.
Строки целиком изменять нельзя, изменить нужно лишь определенные границами группы.
И эти группы с совпадающим концом будут на разных строках в первом и втором файлах. Группа символов 2-й строки 1-го файла будет совпадать с группой 1037 строки 2-го к примеру :D
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

torygmile писал(а):Строки целиком изменять нельзя, изменить нужно лишь определенные границами группы.
Что значит "нельзя"? Это всего лишь вопрос реализации. Символы в серёдке поменяются или строки целиком - не имеет никакого значения, результат будет один.
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

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

Сообщение Flasher »

Строка меняется на строку целиком, а не выборочно по символам, это и так понятно.
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

Вот скажем строка из документа где нужно поменять группы
<a title="The Guardian weekly 2011.05.27" target = "_blank" href="http..hwt73qiyv8ei/The_Guardian_weekly_2011.05.27.pdf.html"><img style="border:none;" src="/button.png" title="The Guardian weekly 2011.05.27" alt="Download Newspapers The Guardian weekly 2011.05.27 " /></a><br /
Это группа
http..hwt73qiyv8ei/The_Guardian_weekly_2011.05.27.pdf
http..- неизменямое начало группы. The_Guardian_weekly_2011.05.27.pdf конец который должен совпасть с соответствующей группой в другом файле. И группа должна замениться с другого файла такой
http..de4576556788ei/The_Guardian_weekly_2011.05.27.pdf
Т.е. строка станет такой
<a title="The Guardian weekly 2011.05.27" target = "_blank" href="http..de4576556788ei/The_Guardian_weekly_2011.05.27.pdf.html"><img style="border:none;" src="/button.png" title="The Guardian weekly 2011.05.27" alt="Download Newspapers The Guardian weekly 2011.05.27 " /></a><br /
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

О, нет, тогда первый пример был совершенно не в кассу. Мало того, что в первой неизменяетмой части нет символа "/", так ещё и во второй этих символов 5, а не 1.
Имеем следующее:
Начало: <a title="The Guardian weekly 2011.05.27" target = "_blank" href="http..
Заменяемая часть
Конец: /The_Guardian_weekly_2011.05.27.pdf.html"><img style="border:none;" src="/button.png" title="The Guardian weekly 2011.05.27" alt="Download Newspapers The Guardian weekly 2011.05.27 " /></a><br /
Теперь нужно понять - где в начале неповторяемая константа?
В конце, как я понял, это символ "/", идущий следом после заменяемой части.

Можно, конечно, брать неизменяемые куски целиком и прописывать их в параметрах кнопки, но там юзеру надо заведомо понимать, как правильно выставлять кавычки.
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

Это я привел как пример, просто если бы не убрал получилась гиперссылка.
Заменяемая часть лежит между символами //, вот так /hwt73qiyv8ei/.
Во второй части нет 5 символов, так как нам нужно ограничить изменения неизменяемой второй частью - The_Guardian_weekly_2011.05.27.pdf в предыдущем примере.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

torygmile писал(а):если бы не убрал получилась гиперссылка.
Не убрал что? Символ "/"? Т.е. имеем
<a title="The Guardian weekly 2011.05.27" target = "_blank" href="http://ссылка/
И получается, что символ "/" в неизменяемой части не один, а несколько, в зависимости от вложенности. Короче, тут, похоже, придётся как минимум первую часть целиком прописывать, п.ч. неизменяемой константы в ней нет, ну, разве что "http://".
torygmile писал(а):Во второй части нет 5 символов, так как нам нужно...
Уже нелогично. То, что - нужно, не означает, что - нет. Они есть и я их подсчитал. Заменяться в любом случае будет вся строка, а не набор символов (который раз уже пишу). Хотя это уже не важно.
torygmile
Сообщения: 10
Зарегистрирован: Чт авг 18, 2011 01:10
Откуда: Россия

Сообщение torygmile »

Задача решена, помогли с алгоритмом на Mathematica, спасибо большое за участие :D
Ответить