Нус-с-с... Можно оценить мой скорбный труд.
Часть "болтологическая" писалась для себя и под себя, для форума было сделано буквально пару касаний рашпилем. Поэтому за нее не обессудте, кладу "as is". Вроде факты изложены верно. Все примеры прогонял через "Тест" и вот они уж точно верные. Если так удобнее кому - можно ими одними и ограничиться. Да - и если кто не следил за темой, поясняю "оп чем, сосбсно, речь-то?": зайдите в св-ва любого проекта, далее "Дополнительно" и кнопка "Замена адресов". Одноименный диалог увидели? А как им пользоваться знаете? Я так и думал.
Поехали:
I. Теория>>> [more]
Код: Диалог "Замена адресов"
Позволяет "на лету" заменить содержимое ссылки на другую ссылку или произвольный текст.
Концепции данного диалога:
1. Состоит из главной таблицы составленной из 3-х колонок: URL, Заменить, Чем
2. Каждая строчка в таблице - это функция замены применяемая к ориг. адресу получаемому программой с физич. сервера
3. Ниже таблицы есть текстбокс "URL" позволяющий увидеть результат применения любой строки-функции к любому адресу, а говоря более обще - к любой последовательности символов. Для этого достаточно нажать кнопку "Тест" - обычный MessageBox покажет результат преобразования, т.е. отобразит ТРАНСЛИРОВАННЫЙ набор символов.
4. Колонка 'URL' содержит тот исходный адрес/строку который, по нашему мнению, подлежит трансляции. Следует обратить внимание, что это колонка-фильтр. Если оригинальная строка ему НЕ удовлетворяет - никакой трансляции не производится.
5. Колонка 'Заменить' указывает какая часть(-и) строки из колонки предыдущей нам "не нравится" и подлежит(-ат) замене.
6. Колонка 'Чем' указывает на что именно следует заменить ту часть(-и) исходной строки что были выделены колонкой предыдущей.
7. Правила замены. По каждому правилу приводится пример(в конце поста). Лучше его импортировать в Эксель. Колонки(всего 5) для примеров(слева-направо): (1)содержимое колонки URL главной таблицы диалога, (2)содержимое колонки Заменить, (3)содержимое колонки Чем, (4)если данное правило разрешено к применению и сервер возвращает нам вот такой адрес..., (5)он будет приведен вот к такому виду. Далее по тексту ссылка на конкретный пример идет по его порядковому номеру сверху-вниз указанному в квадр. скобках, вот так: [21]. Нумерация примеров начинается с [2].
7.1. Все строчки НЕ содержащие мета-символов(см. ниже) интерпретируются как есть, т.е. в исходной строке(адресе) ищутся вхождения фильтра 'URL'. Если вхождения не обнаружено(адрес не удовл. фильтру) - никакие преобразования не производятся[2]. Если фильтр обнаружен, то внутри исходного адреса ищутся все подстроки 'Заменить' и(в случае нахождения) переписываются 'Чем' [3], [4].
7.2. К мета-символам относится последовательность из одной/двух/трех звездочек(*/**/***). Они имеют несколько разный смысл для 3-х колонок главной таблицы.
7.3. В колонке URL особый смысл имеет только единственная(или, говоря более обще - первая) звездочка в последовательности символов. Она означает буквально следующее: в этом месте в исходной строке может быть любая последовательность любых символов, в т.ч. символов может не быть вообще. Ставить * в начале колонки URL [5], в конце [6], а так же в начале и конце [7] - смысла нет, т.к. содержимое этой колонки ВСЕГДА ищется как подстрока оригинальной строки/адреса. Иными словами в этой колонке ВСЕГДА имеется подразумеваемая звездочка в начале и конце фильтра [8]. Т.о. данный метасимвол может нам пригодится лишь в окружении других символов, где он и выполняет свою прямую роль - заменяет любое кол-во(0 в т.ч. [9]) символов - [10][11], но [12]. Звездочку в колонке URL можно применять неоднократно - [13], но [14]. Если после звездочки сразу же указана вторая(третья,...) звездочки - то эти последующие трактуются как обычные сиволы, иначе говоря должны присутствовать в исходном адресе иначе трансформация не происходит - [15],[16], но[17].
7.4. Если оригинальный адрес прошел фильтрацию колонкой URL и был отобран для трансформации, то метасимвол (*) в колонке 'Заменить' означает:
-если (*) указана ПОСЛЕ одного/нескольких обычных символов - найти в оригинальном адресе ПЕРВОЕ вхождение указанных обычных символов и заменить их, а так же все что следует за ними содержимым колонки 'Чем', [18][19]. Если последовательность не найдена - не делать ничего [20].
-если (*) указана МЕЖДУ обычных символов(т.е. слева и справа от звездочки есть произвольное кол-во любых символов) - найти в оригинальном адресе ПЕРВОЕ вхождение указанных обычных символов С ЛЮБЫМ кол-ом промежуточных символов и заменить ВСЮ комбинацию содержимым колонки 'Чем', [21], [22]. Промежуточных символов м.б. и 0 [23].
-если (*) указана ПЕРВЫМ символом колонки 'Заменить' - не делать ничего, [24], [25], но [26].
7.5. В колонке 'Заменить' все вхождения (*) кроме первого трактуются как обычный символ, [27], [28]. Вхождения типа (**) и (***) имеют особый смысл, см. далее.
7.6. Спец-последовательность звездочка-звездочка и звездочка-звездочка-звездочка нужна для поиска подстрок подлежащих замене в стиле AA<любые символы-1>BB<любые символы-2>CC<любые символы-3>. Иными словами для ситуаций когда заменяемую подстроку можно опознать по НЕСКОЛЬКИМ опорным сочетаниям символов(AA-BB-CC) разделенных <произвольными символами>. При этом последовательность <любые символы-1> кодируется тройной звездочкой, <любые символы-2> - двойной звездочкой, <любые символы-3> - одинарной. Но не наоборот! См. [29], [30] и [31] - правильный вариант. [32] тоже верен синтаксически, но не обнаружен в исходном адресе, т.к. последний не содержит последовательности вида ".3/c", а это одно из опорных сочетаний заменяемой подстроки.
7.7. Еще раз о влиянии наличия метасимволов(*/**/***) в колонке 'Заменить' на логику поиска фрагмента подлежащего замене. Если метасимволов в указанной колонке НЕТ - ищутся ВСЕ(!) фрагменты исходного адреса удовл. указанной маске поиска, [33](произведено 3 замены). Если же метасимвол(-ы) ЕСТЬ - ищется ПЕРВЫЙ(!только!) фрагмент и заменяется только он, [34][35](по 1-й замене в каждом примере). Особенно показательго сравнение примеров [33] и [35].
7.8. Допустим выражение '12S3' является исходным строкой/адресом. Пусть для него в колонке 'Заменить' указан шаблон '1*3'. При таком раскладе ясно, что * будет подразумевать под собой последовательность символов '2S'. Назовем выражение подменяемое *-кой(но не весь шаблон поиска из колонки 'Заменить'!) *-выражением. В нашем примере *-выражение='2S', но НЕ '12S3'. Помимо этого бывают **-выражения и ***-выражения. Все дальнейшие рассуждения полностью применимы и к ним. С учетом всех этих условностей метасимволы в колонке 'Чем' имеют след. смысл: заменить подстроку в исходном адресе не константным набором символов(как было во всех примерах до сих пор), а константным набором символов+*-выражением в любом сочетании и любой последовательности. При этом заменяется, как и раньше, ВСЯ последовательность символов указанная в колонке 'Заменить', а *-выражение всегда является лишь ее частью. Допустим, что ссылка говорит нам, что на некоем сервере есть корневой фолдер folder1, а ему принадлежат подфолдеры folder2, folder3,.... . Мы же хотим такую ссылку, которая бы после имени сервера указывала эти подфолдеры, минуя корневой фолдер. Тогда - [36]. А, допустим, что бы подфолдеры сделать корневыми, а folder1 напротив их суб-фолдерами - [37]. И еще один пример - [38].
7.9. Колонку 'Чем' всегда можно оставить просто пустой. Это приведет не к замене подстроки из 'Заменить', а к ее удалению из исходной строки. Например [38] можно переписать как [39].
7.10. В колонке 'Чем' наряду с */**/*** можно указывать макрокоманды URL вида {:0hour} и т.п., но их разбор выходит за рамки непосредственно диалога поиска/замены. По ним см. хэлп к программе.
8. Всем - удачных замен адресов.