gasyoun
Jan 15 2005, 23:15
Необходимо выделить первое слово в каждом новом абзаце - 4500 строк в словаре, а форматы разные - придумать условия макроса не смог, цифр там нет, но длина слов разная - отделяется от значения слова 1 пробелом. Имели ли дело?
М.
Готового решения сейчас не имею, но думаю, что можно решить задачу следующим образом (сейчас имею под рукой только 2000).
Известно, что, записав макрос, потом можно редактировать его (или промсотреть код). Это основная мысль.
Пишем макрос: начало записи, делаем необходимые действия ("Ctrl+стрелка вниз"). Отсюда имеем код перехода на следующий параграф. Соответственно, "Ctrl+Shift+стрелка вправо" даёт нам код выделения слова. Конец записи макроса.
Ну и, разумеется, не нужно при этом перерисовывать экран (вроде это контролировалось).
Думаю, что в итоге таким образом можно собрать программный код для первых слов во всех абзацах.
Это сообщение было отредактировано: Evgen, 15 Янв, 2005 г. - 23:41
gasyoun
Jan 16 2005, 01:03
Как тогда отметить, что там по середине слово или это не надо?
1) знак нового параграфа
2) слова разной длины
3) конец слова и пробел
Пока не получается, вручную пока еще не стану...
типа
http://web.ticino.com/multilingual/macro_f..._phrase.htm
Это сообщение было отредактировано: gasyoun, 16 Янв, 2005 г. - 01:16
Janyzak
Jan 16 2005, 01:20
Открываете Ворд.
Открываете текст с абзацами.
В ворде включаете "непечатные знаки" (в "инструментах" знак абзаца).
В Вашем тексте теперь каждый абзац обозначен своим знаком.
Открываете "Сервис ->Макрос ->Запись макроса...
Пишете название макроса, хоткей этому макросу.
Теперь идет запись макроса.
Открываете диалог "поиск" (ctrl+F).
В строке "поиск" пишете - ^p (это поиск знака абзаца)
Нажимаете на OK.
Знак абзаца найден. Вы выходите на текст и нажимаете на стрелку "вправо".
Курсор станет в начале первого слова следующего абзаца.
Теперь нажимаете на shift+ctrl+"стрелка вправо" - будет выделено искомое слово.
Нажимаете на ctrl+B - это слово станет жирным.
Затем нажимаете на стрелку "вправо" - это для того, чтобы выделение "потухло".
Нажимаете на "стоп" в макрозаписи.
Закрываете Ворд с тем, чтобы только что сделанный Вами макрос запомнился-записался в Normal.dot.
Снова загружаете Ворд, свой файл, где Вам следует в начале текста сделать пустой абзац.
Затем нажимаете на хоткей того макроса, что Вы создали.
Наслаждайтесь, как говорится.
С уважением,
Жанызак.
Не понял, с чем связаны встречные вопросы...
Что это значит: "Как тогда отметить, что там по середине слово или это не надо?"
Было что: "Необходимо выделить первое слово в каждом новом абзаце - 4500 строк в словаре, а форматы разные - придумать условия макроса не смог, цифр там нет, но длина слов разная - отделяется от значения слова 1 пробелом."
1) "Необходимо выделить первое слово в каждом новом абзаце" — так это вроде как возможно сделать.
2) "Форматы разные" я понял как "форматирование текста может оказаться любым, главное — кодировка символов". Это верно?
3) "цифр там нет" — да и фиг-то с ними, цмфры — те же символы.
4) "длина слов разная" — а какая разница при выделении слова через быстрые клавиши?
5) "отделяется от значения слова 1 пробелом" — здесь я переспрошу: а что значит "значение слова"?
6) единственное, что я сейчас не проверил, так это работу с буфером обмена через макрос. Предположил, что ЭТО должно быть.
Это сообщение было отредактировано: Evgen, 16 Янв, 2005 г. - 01:30
Kassian
Jan 16 2005, 01:27
Или по пути Evgen'а или так еще можно:
1. Заменяем "^p" на что-нибудь, что заведомо в тексте не встречается. Напр., на "^p%%%"
2. В режими UseWildcards (по-рус. не помню, звиняйте) ищем "%%%* " (после * стоИт пробел)
3. Творим с выделенным первым словом свое черное дело.
4. Удаляем все "%%%".
eof
Это сообщение было отредактировано: Kassian, 16 Янв, 2005 г. - 01:43
gasyoun
Jan 16 2005, 01:28
1) да
2) да
3) всмысле все гораздо проще
4) не я не умею так сразу
5) есть заглавие, оно и первое слово, а есть сам корпус статьи, разделителем служит пробел
6) ворд писал Гейтс и поэтому из версии в версию предположения, чаще всего, увы, перестают работать
Janyzak
Jan 16 2005, 01:39
Уважаемые знатоки, к вам вопрос:
Как записать концовку макроса так, чтобы тот повторил это действие до тех пор, пока не дойдет до конца текста?
Я читал, что есть команда "Next... Loop", но так-и не смог это как-то отразить в макросе.
Поэтому при создании моего электронного кыргызско-русского словаря я нажимал вышеуказанный макрос столько раз, сколько абзацев было - это где-то 25 тысяч...
С уважением к тому знатоку, который подскажет решение проблемы повтора до конца текста.
Жанызак.
Цитата
4) не я не умею так сразу
6) ворд писал Гейтс и поэтому из версии в версию предположения, чаще всего, увы, перестают работать
4) хе, видать, я свою мысль не донёс: выделяет сама машина (быстро!

), нам нужно только нажать нужную комбинацию клавиш;
6) думаю, что программная работа с буфером обмена в среде виндоуз в языках программирования (а сейчас мы говорим о Visual Basic) ну очччень редко меняется. Посудите сами: насколько все привыкли к комбинациям Сtrl+С и Ctrl+V? Ага, мелкомягкие уже давно приучили всех пользователей. И что ж, неужели они пойдут на то, что им придется столкнуться с миллионами претензий их пользователей ??? Я вас умоляю...
Цитата
Как записать концовку макроса так, чтобы тот повторил это действие до тех пор, пока не дойдет до конца текста?
Я читал, что есть команда \"Next... Loop\"
А там, где читал, не было такого варианта: «While Not EOF» ?
Kassian
Jan 16 2005, 01:46
Janyzak
Цитата
Как записать концовку макроса так, чтобы тот повторил это действие до тех пор, пока не дойдет до конца текста?
Если делать по моему рецепту (с уникальным маркером), то в п.2 делаем не find, а просто замену на "^&" (т.е. повторение того, что в строке поиска) с нужным форматированием. Или на "^&" какого-нибудь красного цвета, а когда-нибудь потом уже весь красный меняем на нужное форматирование.
gasyoun
Jan 16 2005, 01:52
Все работает Жан-жак, но только loop'a нету... а так спастбо, здорово.
Однако Касиан, твой метод мне не ясен, так как не знаю как в русском ворде зовут WildCards, хоть и понимаю их функцию. Что такое "перерисовывать экран " Евген?
Do While Not EOF(1) ' Зацикливаемся, пока не конец файла
Это сообщение было отредактировано: gasyoun, 16 Янв, 2005 г. - 02:00
Цитата
WildCards
Ну, мы с вами не в прериях, право... и это не \"дикие\" карточки

)
А просто
служебные знаки/символы.
Цитата
Что такое \"перерисовывать экран \" Евген?
Бывало, что пишеь макрос, и когда его запускаешь, то он отрабатывает с перерисовкой экрана (правда, не помню точно, в какой проге): пошагов, постранично, в общем — мрак полный на многостраничной верстке... А выход был в отключении перерисовки (Redraw по-сегодняшнему, в терминах Корела

).
Цитата
Do While Not EOF(1) ' Зацикливаемся, пока не конец файла
Дык, оператор While (насколько сейчас помню) можно по-разному "оформить".
И проверку в начале цикла, и в конце.
Звиняюсь, но здесь мне уже хочется сказать: "Учи матчасть".
Kassian
Jan 16 2005, 02:25
Evgen
Цитата
Ну, мы с вами не в прериях, право... и это не \"дикие\" карточки

)
А просто служебные знаки/символы.
Во, еще вспомнил: в какой-то версии оно называется "Подстановочные знаки".
Цитата
Во, еще вспомнил: в какой-то версии оно называется \"Подстановочные знаки\".
Это было по-русски в Ворде?
Хотя... скорее соглашусь с тем, что это было

) только так смутно-смутно, потому как не могу вспомнить название проги

вот же ж блин, провалы... как недавно сказал Шляпа: "Голова вся в дырочках..." 8-)
Janyzak
Jan 16 2005, 03:02
К сожалению, телефон забарахлил...
Так как:
чтобы весь цикл повторился до конца файла, следует поставить
While Not EOF
или
Do While Not EOF(1) ?
Уважаемый Евгений:
"А там, где читал, не было такого варианта: «While Not EOF» ?"
Такого варианта не было. Я читал, наверно, в справочнике Визуал Бейсик.
Матчасть у меня слабый, потому что очень туго дается все это.
Подскажите просто, пож., сжальтесь.
Конечно, я уже покончил со словарем, но вдруг еще где кому понадобится сей элемент...
Kassian
Jan 16 2005, 03:11
Janyzak
Вопрос: что тебе надо сделать с таким первым словом? Присвоить стиль? Тогда можно через замену на цвет, а потом весь красный (к примеру) заменить на этот стиль.
А не было ли задачей вопрошающего создание указателя?
Например: через перекрестные ссылки?
gasyoun
Jan 16 2005, 15:00
Касиан прекрасен как всегда!
Я еще не поуму как весь цикл присвить, так как ВБ выдает баг, а он уже про то, что можно цвет пристроить - да какая разница что - главное что-то отличительное от всего остального текста вот и все.
А куда именно ставить While Not... не пойму, все обратно выдает... застрял. А указатель - так это следующий этап, пока бы с этим справиться...
Была у меня такая заморочка,только "оболдевать" надо было год и ставить после него тире.
Макросом это делается действительно быстро и просто.
Цитата
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend 'выделение первого слова
Selection.Font.Bold = wdToggle 'оболдевание
Selection.MoveDown Unit:=wdParagraph, Count:=1 'переход в начало следующего параграфа
Это тело макроса. Мне не 25000 раз надо было заменять, так что я просто повторил эти строки 5 раз и запускал его 10 раз ;-)
Единственный косяк - в подзаголовках он мне тоже все менял, но при желании и наличии времени я думаю реально сделать чтобы он и стиль проверял (в заголовках не менять), и работал пока все не заменит.
Кстати вот отличная страничка по всяким вкусностям при использовании поиска и замены в ворде и вообще редактированию и верстки(!!!) в ворде
http://www.editorium.com/euindex.htm , а на сайте
http://www.editorium.com можно найти также кучу полезных макросов (правда за деньги, но в этом поможет утилитка Advanced VBA Password Recovery
Shlyapa
Jan 16 2005, 22:04
А вёртска данной конкретной работы в Word-е — непременное условие?
Ведь в InD CS (InCopy CS) выделение первого слова каким угодно образом (хоть цветом, хоть начертанием, хоть как) делается просто через параметры стиля абзаца, с помощью Nested Styles.
gasyoun
Jan 16 2005, 22:47
Цитата
А вёртска данной конкретной работы в Word-е — непременное условие?
Нет, но так удобнее, так как остальные проги просто не справляются с азиатскими языками пока... Loop корявый...
Shlyapa
Jan 16 2005, 23:33
Цитата
остальные проги просто не справляются с азиатскими языками пока... Loop корявый...
Да ну?!
Адобовский софт последних версий прекрасно понимает любые языки. По-китайски и по-японски я не напрягаясь верстал в InD и частично в AI, когда нужны были «строчки» вертикально справа налево.
Kassian
Jan 17 2005, 00:03
gasyoun
Цитата
Я еще не поуму как весь цикл присвить, так как ВБ выдает баг, а он уже про то, что можно цвет пристроить - да какая разница что - главное что-то отличительное от всего остального текста вот и все.
Если ты внимательно прочитаешь мои посты, то увидишь, что ВБ тебе не нужен будет вообще!
Достаточно сделать N-ное количество глобальных замен. При желании можно при этом включить запись макроса...
gasyoun
Jan 18 2005, 18:02
ВБ, дело в том, что на тех форумах, где я читаю твои посты, не сразу и не всегда могу понять конкретние советы к действию. Глобальные замены, должно быть имеют какой то алгоритм их запуска о котором, увы, в применении к таким требованиям, я и не слышал. Извини, если можно еще конкретики, буду только благодарен за твои в остальном весьма дельные и практические советы.
2
gasyoun
Цитата
Глобальные замены, должно быть имеют какой то алгоритм их запуска о котором, увы, в применении к таким требованиям, я и не слышал.
Это простая замена текста (точнее говоря, поиск+замена). А глобальная — да потому что запускается (при желании) по всему тексту.
Производится в Ворде штатными средствами. Довольно гибкий инструмент.
В диалоге "Найти и заменить" под кнопкой "Специальный" находятся именно специальные (служебные) символы/знаки/объекты, как то: знак абзаца, разрыв раздела и т.д. Оперируя поиском и заменой с использованием вышеупомянутых объектов, можно решить многие задачи по приведению текста к нужному виду.
Цитата
А куда именно ставить While Not... не пойму, все обратно выдает... застрял.
Не настаиваю на программном решении, просто уточню про While.
——————————————————————————————————
1) Syntax:
While condition
[statements]
Wend
——————————————————————————————————
2) Syntax
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
Или же:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
——————————————————————————————————
Т.е., попутал я немного. Идею про While привел по памяти из Си.
Выше приведено оформление циклов из справки по Visual Basic 6.3
gasyoun
Jan 19 2005, 01:36
Евген - рад твоему совету.
Еще скажи есть ли "справки по Visual Basic 6.3" в одном пдф или .chm где-нить? Так или иначе - спасибо - оказывается я знал, но не знал что это называется глобальной заменой, а также про цпец. символы знал, но ни мог их скомбинировать, чтобы слово целое выделить, теперь могу. Dankeschon!
Цитата
есть ли \"справки по Visual Basic 6.3\" в одном пдф или .chm где-нить?
Выслал *.chm на hotbox, который указан в пропертях.
Обращаю внимание на то, что версия 6.3 идет с Офисом ХР, а какая версия в твоём (2003), я не знаю.
Код
For Each myPara In ActiveDocument.Paragraphs
'делаем все, что нужно c абзацем
Next 'переходим к следующему
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.