[ID CS4-CS6] Поиск текста GREP

  • Автор темы Автор темы ewa
  • Дата начала Дата начала
уже очищенный текст
Убрать разрывы легко и можно было без блокнота
Сами по себе метасимволы индизайн ищет
Нужно было
надо "поймать" то, что МЕЖДУ разрывами страниц.
К найденному тексту применить стиль, чтобы текст встал в две колонки.
 
Это флуд, а не решение.
Конкретное решение бывает только в конкретной задаче. А пока задача выглядит довольно абстрактно, кроме того, что есть проблема с GREP.
 
Последнее редактирование модератором:
Пока тут только одно, а от вас по делу ноль
можно в три шага
1) меняем ~P на #~P
2) выделяем то что между двумя разрывами страницы
Код:
(?<=#\r)(.+\r)*?.*?(?=#\r)
делаем с этим что нужно
3) убираем # ( вместо # можно использовать любой символ не встречающейся в тексте)
 
можно в три шага
1) меняем ~P на #~P
2) выделяем то что между двумя разрывами страницы
Код:
(?<=#\r)(.+\r)*?.*?(?=#\r)
делаем с этим что нужно
3) убираем # ( вместо # можно использовать любой символ не встречающейся в тексте)
Второй шаг уже некорректен. Вы пропустили пункт 3) в условии задачи. У меня очень много разрывов страниц по тексту. Но не везде (между ними) имеется переход на новую колонку. А нужно поймать текст между разрывами, содержащий именно переход на новую колонку. Чтобы только его сделать двухколонником (в стиле).
 
Последнее редактирование:
нужно поймать текст между разрывами, содержащий именно переход на новую колонку. Чтобы только его сделать двухколонником (в стиле).
Не уверен, что все понимают эту задачу одинаково. Лучше было бы дать условную картинку макета с желаемой версткой.
Она должна выглядеть так?
1716280634501.png
 
Вы пропустили пункт 3) в условии задачи. У меня очень много разрывов страниц по тексту. Но не везде (между ними) имеется переход на новую колонку. А нужно поймать текст между разрывами, содержащий именно переход на новую колонку.
А если тоже самое но вместо
меняем ~P~M на #~P~M
 
Второй шаг уже некорректен. Вы пропустили пункт 3) в условии задачи. У меня очень много разрывов страниц по тексту. Но не везде (между ними) имеется переход на новую колонку. А нужно поймать текст между разрывами, содержащий именно переход на новую колонку. Чтобы только его сделать двухколонником (в стиле).
я действительно до конца не понимаю что вы хотите выделить? текст от ~M до ~P? Или от ~P до ~P, между которыми есть ~M? и что с этим сделать? Сделайте idml с коротким примером, тогда может станет понятно
 
Видимо это

Стиль присвоить сплит на 2 колонки
Вы абсолютно правы. Поймать текст между ближайшими разрывами страниц, содержащий переход на другую колонку.
При этом разрывов страниц по тексту неограниченно много, но не между всеми есть переход на другую колонку. То есть переход на другую колонку -- это важное условие.
Искомый текст может содержать несколько абзацев -- это тоже важное условие, потому что если там по одному абзацу до перехода на новую колонку и после, то ловится легко.
Что сделать с найденным текстом? Присвоить стиль абзаца, раскладывающий пойманный текст на две колонки свойствами стиля абзаца. Но хоть бы и просто покрасить зелёненьким -- от этого суть задачи не меняется.
Собственно, всё вышесказанное в этом комментарии лишь повторяет условие задачи из старта топика. Ничего другого я не дописал.
 
Последнее редактирование:
Честно говоря даже не понимаю, а как индиз должен найти ~P~M, если между двумя этими маркерами несколько абзацев текста? Придумали что-то новое и текст в поиске никак указывать не нужно?
 
Логика была простая. Задать маркер разрыва страницы ~P, затем задать любые символы кроме перехода на другую колонку [^~M]+, затем сам переход на другую колонку ~M, опять кучу текста до разрыва страницы [^~P]+ и сам разрыв ~P.
Итого: ~P[^~M]+~M[^~P]+~P
По этой логике индиз должен найти разрыв страницы и потом искать маркер перехода на другую колонку. Находим переход на другую колонку, проходим его и ищем до первого следующего разрыва страницы. И вот это всё возвращаем (применяем стиль).
Ошибочность метода видна сразу, так как поиск начнётся с первого же разрыва страницы и может включать в себя кучу других разрывов, которые будут ДО перехода на след. колонку. Это, конечно, ошибка, но чёрт с ней, индиз вообще не ищет такую конструкцию. Даже если задать тестовый текст, состоящий всего из двух разрывов (до и после), то всё равно не ищет. Предполагалось, что кто-то мог сталкиваться с такой проблемой и либо дать её решение, либо указать на нерешаемость.
 
Предполагалось, что кто-то мог сталкиваться с такой проблемой и либо дать её решение, либо указать на нерешаемость.
Так как вы хотите, сделать не получится. Неспособность искать конструкции с использованием разрывов фреймов, страниц, колонок, четных и нечетных страниц забетонирована глубоко в индизайне и связана с тем, что разрывы являются одновременно и возвратом каретки - "\r". Если вы выделите символ разрыва страницы в тексте, который имеет GREP-код ~P, и вставите его в поле поиска, то вставится символ "\r", а не ~P. И то же самое произойдет с остальными символами разрыва. Вам на первой странице написали, как выкрутиться - поменять символ нужного разрыва на его же плюс невстречающийся %#символ#% в тексте, затем сделать нужные действия при поиске текста между этими двумя %#символами#%, и третим ходом удалить этот символ из всего текста.
 
Последнее редактирование:
  • Спасибо
Реакции: iv-mi
Так как вы хотите, сделать не получится. Неспособность искать конструкции с использованием разрывов фреймов, страниц, колонок, четных и нечетных страниц забетонирована глубоко в индизайне и связана с тем, что разрывы являются одновременно и возвратом каретки - "\r". Если вы выделите символ разрыва страницы в тексте, который имеет GREP-код ~P, и вставите его в поле поиска, то вставится символ "\r", а не ~P. И то же самое произойдет с остальными символами разрыва. Вам на первой странице написали, как выкрутиться - поменять символ нужного разрыва на его же плюс невстречающийся %#символ#% в тексте, затем сделать нужные действия при поиске текста между этими двумя %#символами#%, и третим ходом удалить этот символ из всего текста.
Не совсем так. Поиск между двумя точками -- это просто. У меня задействована третья точка -- маркер разрыва колонки, который должен быть внутри.
Но вашу идею понял.
Сначала вопрос удивления. Как же так: сами по себе маркеры и разрыва страницы, и перехода на другую колонку ловятся, а внутри GREP-конструкции не работают? Это же как-то неправильно? Более того, маркер перехода на другую колонку работает в простой конструкции .~M. (что как раз ловит по одному символу до и после маркера -- и это было бы решением моей задачи, если бы в условии между разрывом страницы и маркером перехода на другую колонку был только один абзац).
Во-первых, делаем вывод, что заложить конструкцию в стиль (в виде GREP-инструкции) невозможно. Вот это я и хотел от кого-то опытных услышать.
Во-вторых, делаем вывод, что одним прогоном замен решить проблему тоже не получится. Это уже жаль, потому что хотелось решить её изящно.
В-третьих, менять маркер разрыва страницы на "его же плюс невстречающийся %#символ#% в тексте" -- это лишняя конструкция. Достаточна замена на уникальный символ (без оставления маркера разрыва; он нам был нужен только как указатель начальной и конечной границ текста, который следует разложить на две колонки). Назовём его "уникальный символ 1" или УС1.
Такая же ерунда получается с маркером перехода на другую колонку. Заменяем его на "уникальный символ 2" или УС2.
Тогда последний вопрос.
А как найти ближайший УС1 до УС2? Дело в том, что в тексте может быть много УС1, но не после каждого из них встретится УС2. (И не забываем, что между ними куча абзацев текста.) Как найти ближайшую связку "УС1 текст УС2"?
 
Последнее редактирование:
А как найти ближайший УС1 до УС2? Дело в том, что в тексте может быть много УС1, но не после каждого из них встретится УС2. (И не забываем, что между ними куча абзацев текста.) Как найти ближайшую связку "УС1 текст УС2"?
Если УС1 - #, а УС2 - ##, то у меня получилось такое:
Код:
(#.*\r)([^#]+\r)+?.+?\r*?##
 
  • Спасибо
Реакции: suntory и ewa