[ID CC-CC2021] Почему не захватывается часть текста ГРЕПом?

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Обрабатываю сноски для статьи "вручную". Ставлю метку (Endnotes), потом ее ищу и от нее и до конца все перетаскиваю в фреймы для сносок (автосноски не годятся, так как иногда согласовать сноску с текстом вообще нельзя, напр., на последней строке фрейма может сидеть 3 многосторочных сноски). Поэтому руками.
Так вот грепом ищу Endnotes и хватаю все, что дальше.
Но оказывается, что часть текста не захватывается (хотя при ручном поиске по грепу по формуле
myInd.FindGrepPreferences.FindWhat = "\(Endnotes\)(.|~F|\r|\n)+"
все выделяется до самого конца материала.
Посмотрел через окошко дебаггера - хвост пропадает (см. скриншот. Должно быть 35 сносок, а обрыв происходит на 32й сноске в случайном(?) месте).
До это определял искомый текст по устаревшей конструкции
Код:
Set mText = mStory.Texts.ItemByRange(mPara1, mPara3)
Set mPara1 = mFound(1).Paragraphs(1)
Set mPara2 = mStory.Paragraphs(mStory.Paragraphs.Count)
Set mText = mStory.Texts.ItemByRange(mPara1, mPara3)
Думал, в этом дело. Оказалось, что и грепом тот же результат - текст недовыделяется. Но не пропадает, а остается после move. Приходится руками остатки перетаскивать в последний сносочный фрейм. В чем может быть причина "недосмотра"?
 

Вложения

  • Clipboard02.jpg
    Clipboard02.jpg
    128.7 КБ · Просм.: 332

veretragna

γνώσις
Сообщения
578
Реакции
200
Похоже на бейсик.
В нем бэкслеши не нужно экранировать? В js, например, все конструкции типа \r\n, которые планируется использовать в грепе, нужно экранировать \\r\\n
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
В бейске вообще нет грепа, как он общается со встроенным в индизайн грепом - отдельная тема для небольшого исследования :(
 

К.Т.

Участник
Сообщения
324
Реакции
337
Если постоянно обрывается в одном месте, можно поискать там какой-нибудь непечатный символ. Или печатный, но нестандартный. Для эксперимента можно попробовать убрать это место из текста.

В бейске вообще нет грепа, как он общается со встроенным в индизайн грепом -
В VBA есть свои регулярные выражения, хотя с меньшими возможностями, чем греп в ID.
Общение с грепом происходит банальной передачей строки, а она просто передаётся как есть.
 
  • Спасибо
Реакции: Skvoznyak

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Мы действительно про VBA сейчас речь ведем?
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Похоже на бейсик.
В нем бэкслеши не нужно экранировать? В js, например, все конструкции типа \r\n, которые планируется использовать в грепе, нужно экранировать \\r\\n
Сейчас проверил - экранировать не надо. При экранировании происходит остановка с ошибкой.
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Если постоянно обрывается в одном месте, можно поискать там какой-нибудь непечатный символ. Или печатный, но нестандартный. Для эксперимента можно попробовать убрать это место из текста.
Удалил 3 последние сноски вместе с текстом. Запустил. теперь пропали новые три последние сноски. ИНогда не пропадают. Может зависит от числа сносок (каким-то хитрым образом)? Попробую попроверять.
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Посмотрел через выделение (программно). Действительно, выделение не доходит до конца статьи. Может как-то можно заставить программку "выделить до конца" как-то еще более более принудительно?
 

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
По этой логике из любой среды можно управлять индизайном - хоть из питона какого ;)
Из MS Office можно. При установке пакета Adobe в офис инсталлируются VBA-библиотеки, относящиеся к Инди/Фотошопу/Акробату/Иллу и пр. Вообще там (Word-Alt_F11-Tools-Preferences) довольно много чего сидит. Теоретически, это богатство можно как-то использовать)))
 

Вложения

  • Clipboard01.jpg
    Clipboard01.jpg
    35.6 КБ · Просм.: 275

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Ответ на вопрос оказался банальным. Надо было просто переопределить переменную mStory, по которой производился греп-поиск. Потому что в ней ДО ТОГО были произведены различные чистки, и содержимое mStory видоизменилось с момента первоначального определения. После определения mStory снова проблема решилась))
 
Последнее редактирование:

hulk1776

Топикстартер
15 лет на форуме
Сообщения
735
Реакции
21
Продолжение темы...
По выражению
"\(Endnotes\)(.|~F|\r|\n)+"
находится не все (см. клип1)
Если не снимая выделения добавляю в строку знак доллара
"\(Endnotes\)(.|~F|\r|\n)+$"
находится все до конца.
Если снять выделение и повторить поиск с этим выражением
"\(Endnotes\)(.|~F|\r|\n)+$"
не находится ничего.
Это глюк или ошибка в понимании?
 

Вложения

  • Clipboard01.jpg
    Clipboard01.jpg
    236.6 КБ · Просм.: 221
  • Clipboard02.jpg
    Clipboard02.jpg
    127.6 КБ · Просм.: 214