Поиск по тексту: как подобраться к _следующей_ строке?

  • Автор темы Автор темы Holden_1971
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Holden_1971

Участник
Топикстартер
Сообщения
8
Реакции
0
Есть такая необычная задачка.
Дан текстовый фрейм, содержимое которого — содержание (оглавление) документа в виде:

Постоянный подзаголовок 1
Случайное название главы 1.....2
Случайное название главы 2.....10
.
.
.
Случайное название главы 8...36,

где после точек идут номера страниц. Таких групп Подзаголовок — последовательность глав всегда несколько.
Требуется получить из этого текста номер страницы, с которой начинается первая глава раздела, в данном случае это цифра 2. Поскольку таких групп несколько, то в итоге должен быть сформирован массив страниц, с которых начинаются подразделы (чтобы потом расставить по ним свои собственные мастер-страницы).

Наименование подзаголовка всегда заранее известно, поэтому первое, что приходит на ум — это простой перебор: два вложенных цикла — по строкам документа, и по набору строк-вариантов подзаголовка с дальнейшим отловом цифры их следующего абзаца.

Но затем прикинув время выполнения (а строк содержания во фрейме — от 200 до 300), я решил попробовать воспользоваться поиском. Примерно так:

Код:
app.findTextPreferences.appliedParagraphStyle = "Стиль подзаголовка";
app.findTextPreferences.findWhat = "Постоянный подзаголовок 1";
var myFoundItems = myTOC.findText();

Так я безо всяких циклов нахожу подзаголовок. Но проблема в том, что я не могу понять, как мне пройти от найденного текстового объекта myFoundItems[0] по цепочке к следующему абзацу и его последнему слову — той самой искомой цифре.

Можно ли вообще решить мою задачу таким способом?
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

А если извлечь номер страницы Постоянного подзаголовка и прибавить 1?
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Прошу прощения, но боюсь, что я не понял, из чего можно извлечь этот номер.

К тому же, повторюсь, я не говорю, что эта задача в принципе не решаема, мне хотелось попробовать решить ее именно через поиск.
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Следом еще один поиск - точки-цифра или табуляция-цифра (или откуда там точки).
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

не понял, из чего можно извлечь этот номер.
Это я недосмотрел, что в Вашем примере т.н. "Постоянный подзаголовок 1" в содержании идёт без номера страницы)).
Есть ещё вариант. Поиском ищем абзацный стиль строк "Случайное название главы 1.....2" и. т.д. В найденном массиве обращаемся к первому параграфу:
Код:
var neededParagraph = myFoundItems[0].paragraphs[0];
и следом:
еще один поиск - точки-цифра или табуляция-цифра (или откуда там точки).
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Есть ещё вариант. Поиском ищем абзацный стиль строк "Случайное название главы 1.....2" и. т.д. В найденном массиве обращаемся к первому параграфу:
Код:
var neededParagraph = myFoundItems[0].paragraphs[0];

Таких групп Подзаголовок — последовательность глав всегда несколько.

Первый параграф всегда будет указывать на начало первого раздела.

А про поиск следом, простите, опять не понял. Можно пример кода?
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Код:
app.findTextPreferences.appliedParagraphStyle = "[B]Случайное название главы[/B]";
app.findTextPreferences.findWhat = [B]""[/B];
var myFoundItems = myTOC.findText();
//После создания массива задаём новые параметры поиска, они будут использоваться ниже в цикле
app.findTextPreferences = null;
//Искать число между табулятором и концом абзаца
app.findTextPreferences.findWhat = "(?<=\\t)\\d+?(?=\\r)";
for (i=0;i<myFoundItems.length;i++){
var neededParagraph = myFoundItems[i].paragraphs[0];
var curPageNum = Number(neededParagraph.findGrep()[0].contents);
alert(curPageNum);
}
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Если я вас правильно понял...
Код:
app.findTextPreferences.appliedParagraphStyle = "Случайное название главы";
app.findTextPreferences.findWhat = "";

var myFoundItems = myTOC.findText(); // Здесь я нахожу все строки содержания "Случайное название главы 1 ... Случайное название главы n"

//После создания массива задаём новые параметры поиска, они будут использоваться ниже в цикле
app.findTextPreferences = null;

//Искать число между табулятором и концом абзаца
app.findTextPreferences.findWhat = "(?<=\\t)\\d+?(?=\\r)";

for (i=0;i<myFoundItems.length;i++){                //По всему списку найденных строк содержания...
    var neededParagraph = myFoundItems[i].paragraphs[0];    //... беру первый абзац... (а он там и так всегда один)
    var curPageNum = Number(neededParagraph.findGrep()[0].contents;//и выделяю из него номер строки
    alert(curPageNum);    //Смотрю и радуюсь :)
}

Но в таком случае для моего примера я получу последовательно цифры 2, 10, ... 36? Нет? Их я бы мог получить из абзаца без всякого поиска, просто взяв paragraphs.words.lastItem()

Меня не покидает ощущение, что я как-то непонятно объяснил, что мне надо получить. Попробую еще раз.

Итак, есть текст вида:

Постоянный подзаголовок 1
Случайное название главы 1..2
Случайное название главы 2.....10
...
Случайное название главы 8...36
Постоянный подзаголовок 2
Случайное название главы 9..37
Случайное название главы 10.....40
...
Случайное название главы 20...51
...
Постоянный подзаголовок 10
Случайное название главы 50..94
Случайное название главы 51.....95
...
Случайное название главы 60...101

И мне в результате работы скрипта нужно получить массив, в котором будут цифры 2, 37, ... 94, то есть номера страниц первого за подзаголовком раздела.
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

А Вы попробуйте вручную: в поиске задать абзацный стиль "Случайное название главы" и кнопкой Find посмотреть результат поиска :).
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Завтра же с утра, обязательно :) Подопытный текст на работе.
 
Ответ: Поиск по тексту: как подобраться к _следующей_ строке?

Да, действительно, поиск по стилю абзаца названия главы «шагает» по группам строк содержания между постоянными подзаголовками, спасибо! Для меня это было как-то неочевидно...
 
Статус
Закрыто для дальнейших ответов.