Кто может поправьте скрипт

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

tree2

Топикстартер
12 лет на форуме
Сообщения
70
Реакции
2
Пожалуйста извините что обращаюсь к вам с такой просьбой. Но я уже голову сломал, всякие книги пролистал про скрипты прочитал посмотрел образцы ничего не получается.
Подправьте пожалуйста скрипт
Здравствуйте. У меня вот такая проблема: есть текст

Иванов И.И. Заголовок статьи<T>№1, 2008<T>12-24<P>
Петров И.И. Заголовок статьи<T>№1, 2008<T>25-45<P>
Сидоров И.И. Заголовок статьи<T>№1, 2008<T>46-56<P>
(<T> - табуляция <P>- enter)

Я сделал так:

REM Created On Monday, February, 11, 2008 by Andrey

WITHOBJECT "CorelVentura.Automation.8"
.TextStartOfPara
.FormatSetParaTag "!ZagAutoName_1"
.FormatParaTagBegin .TagsInSelection = TRUE
.FormatParaFont .Weight = 400, .Italic = TRUE
.FormatParaDefaults .OverscoreThickness = 1852, .OverscoreShift = 36117, .StrikeThickness = 1852, .StrikeShift = 12039, .Underline1Thickness = 1852, .Underline1Shift = 3704, .Underline2Thickness = 1852, .Underline2Shift = 7408, .SuperscriptPointSize = 5.25, .SuperscriptShift = 9261, .SubscriptPointSize = 5.25, .SubscriptShift = 18521
.FormatParaTagEnd
.TextWordRight 3, FALSE
.TextCharRight 1, FALSE
.TypeText CHR(10)
.FormatSetParaTag "!ZagAutoName_2"
.FormatParaTagBegin .TagsInSelection = TRUE
.FormatParaFont .Weight = 400, .Italic = FALSE
.FormatParaDefaults .OverscoreThickness = 1852, .OverscoreShift = 36117, .StrikeThickness = 1852, .StrikeShift = 12039, .Underline1Thickness = 1852, .Underline1Shift = 3704, .Underline2Thickness = 1852, .Underline2Shift = 7408, .SuperscriptPointSize = 5.25, .SuperscriptShift = 9261, .SubscriptPointSize = 5.25, .SubscriptShift = 18521
.FormatParaTagEnd
.EditInitFindText "<T>", .CurrentChapter = FALSE, .Backward = FALSE, .FromBegin = FALSE, .MatchCase = FALSE, .WholeWord = FALSE, .MaintainCase = FALSE, .Reset = FALSE
.EditInitFindText .Reset = TRUE
.EditFindText
.TypeText CHR(10)
.FormatSetParaTag "!ZagAutoName_3"
.EditInitFindText "<T>", .CurrentChapter = FALSE, .Backward = FALSE, .FromBegin = FALSE, .MatchCase = FALSE, .WholeWord = FALSE, .MaintainCase = FALSE, .Reset = FALSE
.EditInitFindText .Reset = TRUE
.EditFindText
.TypeText CHR(10)
.FormatSetParaTag "!ZagAutoName_4"
.TextParaDown
END WITHOBJECT

Так вот первое: если Фамилия И.О. то этот скрипт работает и делает как надо а вот если "Фамилия И." или "Фамилия И. О.", или "Иванов И.И., Петров И.О., Сидоров И." то уже нет
ошибка в этих строчках:
.TextWordRight 3, FALSE
.TextCharRight 1, FALSE
здесь надо указать что-то другое а вот что и как я не знаю

и второе: как указать чтобы скрипт выполнялся автоматически к выделенному тексту.

Спасибо!
 
Ответ: Кто может поправьте скрипт

Т.к. в Вашем тексте нет явного разделения ФИО Автора и Заголовка, то скрипт просто отсчитывает три слова + 1 букву вправо и остальное считает заголовком. Наилучшим выходом было-бы явное разделение Автора/Авторов и Заголовка, некоторым символом, например, той же табуляцией, и переделка скрипта под его учёт.
Т.е. переложить проблему на наборщицу.
 
Ответ: Кто может поправьте скрипт

lev сказал(а):
Т.к. в Вашем тексте нет явного разделения ФИО Автора и Заголовка, то скрипт просто отсчитывает три слова + 1 букву вправо и остальное считает заголовком. Наилучшим выходом было-бы явное разделение Автора/Авторов и Заголовка, некоторым символом, например, той же табуляцией, и переделка скрипта под его учёт.
Т.е. переложить проблему на наборщицу.

Нет наборщика.
Есть текст оглавлений десяти номеров научного журнала за 5 лет
Изначально оглавление было по форме:
И.И. Иванов (Москва) — Название статьи<T>Номер страницы

Редактор захотел сделать указатель всех статей изданных в журнале и дал мне образец. А потом надо всех авторов вынести в другой указатель со ссылкой на номер раздела
Одним скриптом я уже переставил инициалы после фамилии а вот здесь застрял и не могу сообразить.

А как все таки применить скрипт ко всему выделенному тексту?
 
Ответ: Кто может поправьте скрипт

Ну, вот видите, в исходнике заголовок явно отделялся от автора символом тире, не надо было его убивать (тире, не автора).


Не по теме:
И совершенно необязательно целиком цитировать моё сообщение, я его и так вижу
 
Ответ: Кто может поправьте скрипт

lev
В Вентуре с REGExp вооще никак? Забыл уже за давностью лет...
Но в любом случае текст можно изъять из вентуры и обработать любым редактором поддерживающим регулярные выражения (я в своё время FAR'ом обрабатывал). Задача то одноразовая.

Сейчас замену составлять не буду, Но что-то из серии:
"Слово без точки", пробел, Слово с точками, пробел...
Обрати внимание, там между инициалами пробелов не стоит, посему пробел является разделителем.
 
Ответ: Кто может поправьте скрипт

И вообще...
Задача от начала до гонца решалась практически парой замен при помощи регулярных выражений...
Особенно учитывая то, что если мне память не изменет, из Вентуры можно выдрать размеченный тэгами текст, а не всякое RTF-о подобнное безобразие.
 
Ответ: Кто может поправьте скрипт

что-то из серии:
"Слово без точки", пробел, Слово с точками, пробел...
Могут быть несколько авторов, список авторов заканчивающийся на "и др.", иностранные авторы и сокращения, иноязычные заголовки. Теоретически может существовать заголовок начинающийся с фамилии с инициалами. Мало ли какая каша за 5 лет накопится... В первом сообщении приводился пример и с пробелом между инициалами и с единственным инициалом.
 
Ответ: Кто может поправьте скрипт

>.TextWordRight 3, FALSE
>.TextCharRight 1, FALSE
А если не так?
Т.е. не FALSE а TRUE, потом выделенное уже рассматривать в цикле выполнять выделение слов пока не встетится название. Т.е. скакнул на слово с FALSE - это проскочил фамилию. Далее выделяешь следующий симвос справа. Если пробел идем дальше. Если буква, то ставим маркер. Если после снова буква и маркер уже стоит - то это не инициал. А если стоит маркер и выделенна точко, то инициал. Ну или словами выделять. Или строку сражу всю и ее рассматривать - меньше тормозить будет. Хотя и по буквам вполне нормальная скорость :)
 
Статус
Закрыто для дальнейших ответов.