Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2009, 17:49   #1
pavel.lug
 
Аватар для pavel.lug
 
Регистрация: 25.08.2009
Сообщений: 8
По умолчанию копирование текста между двумя словами

Доброго времени! есть большой массив текста но от туда нужно скопировать только отрывки начинающиеся с определенного слова "index" и им же заканчивается и так более 1000 раз причем интервалы разные подскажите пожалуйста решение этой проблемы.
Заранее благодарен.
pavel.lug вне форума Ответить с цитированием
Старый 25.08.2009, 18:26   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте pavel.lug.
а как Вы планируете определить "index" это конец предыдущего фрагмента или начало следуюшего. Если это не имеет значения воспользуйтесь функцией Split, она создаст массив фрагментов разделенных в тексте - "index".
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 25.08.2009, 18:32   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Ворда под рукой нет, так что отвечу описательно.

1. Ctrl-h
Чекбокс Подстановочные знаки отметьте галочкой.
2. В окно "Что искать" впишите (без кавычек):
"[Ii]ndex*[Ii]ndex" (найдётся как index, так и Index — и всё что меж ними)

Пока больше не рискну давать советы.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.08.2009, 21:23   #4
pavel.lug
 
Аватар для pavel.lug
 
Регистрация: 25.08.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Ворда под рукой нет, так что отвечу описательно.

1. Ctrl-h
Чекбокс Подстановочные знаки отметьте галочкой.
2. В окно "Что искать" впишите (без кавычек):
"[Ii]ndex*[Ii]ndex" (найдётся как index, так и Index — и всё что меж ними)

Пока больше не рискну давать советы.

Спасибо большое все находит!
И вопрос в догонку что нужно дописать в макросе чтобы он находил все в тексте а не только первое удовлетворяющее условию
pavel.lug вне форума Ответить с цитированием
Старый 25.08.2009, 21:52   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цикл. (Потом попробую найти такой на форуме.)

Цикл (а покажете его?) срабатывает (в вашу пользу) каждый нечётный раз.

Так что внутри сделайте типа переключатель:
Код:
Dim MNE As Boolean 'сначала MNE = Ложь
<...>
Do
    MNE = Not MNE 'MNE стало Истина, на 1-й, 3-й, 5-й раз и т. д.'
    If MNE Then
    <поиск и обработка фрагментов текста>
    End If
Until Not Selection.Find.Found
Поледний фрагмент — как-то особо, мне кажется. Придёт Алекс Витер — и всё прояснит!

Последний раз редактировалось Sasha_Smirnov; 25.08.2009 в 22:48. Причина: нечётный.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.08.2009, 21:58   #6
pavel.lug
 
Аватар для pavel.lug
 
Регистрация: 25.08.2009
Сообщений: 8
По умолчанию

погорячился я сказав что все находиться вернее в том то и дело что находит все. потому как он считает последнее слово условия первым и при повторном поиске выделяет и не нужный кусок текста

Теперь сижу думаю как удалить каждый второй кусок текста

Последний раз редактировалось pavel.lug; 25.08.2009 в 22:00.
pavel.lug вне форума Ответить с цитированием
Старый 25.08.2009, 22:24   #7
pavel.lug
 
Аватар для pavel.lug
 
Регистрация: 25.08.2009
Сообщений: 8
По умолчанию

Пошел по пути наименьшего сопративления вместо того чтобы копировать нужное и вставлять в новый док просто удаляться каждая вторая фраза.
Еше раз спасибо за формулу!

,А вот вопрос с циклами так и остался открытым не понял что нужно прописать для того чтобы он продолжил поиск и удаление до конца текста
pavel.lug вне форума Ответить с цитированием
Старый 25.08.2009, 23:40   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Придет — это громко сказано. Поломал ногу, поэтому в лучшем случае могу прискакать
К делу. Вот мой вариант, не проверял. Если нужно отладить, то дай пример документа.
Код:
Sub FindBetween()
  Dim iStart As Long 'верхняя граница поиска
  
  Dim iEnd As Long 'нижняя граница поиска
  Dim oRng As Range 'Диапазон для поиска
  Dim oNewDoc As Document 'Документ, куда копируются найденные фрагменты
  
  Set oRng = ActiveDocument.Range
  iEnd = oRng.End
  Do
    If oNewDoc Is Nothing Then Set oNewDoc = Documents.Add 'Создаем новый документ
    oRng.SetRange iStart, iEnd 'Задаем диапазон поиска
    With oRng.Find 'Начинаем искать
      .Text = "[Ii]ndex*[Ii]ndex" 'Фраза для поиска
      .MatchWildcards = True 'Подстановочные знаки
      .Execute 'Выполнить поиск
      If .Found Then 'Если нашли
        iStart = oRng.End 'Верхнюю границу диапазона поиска переносим в конец найденного фрагмента
        oNewDoc.Range.InsertAfter oRng.Text 'В конец нового документа вставляем найденный фрагмент
      End If
    End With
  Loop While oRng.Find.Found
End Sub
Sasha_Smirnov, идея с булевым флагом для разделения на четный-нечетный мне понравилась. Но думаю, что здесь будет более понятным и логичным мой подход: переопределение диапазона поиска так, чтобы он не включал в себя уже найденные фрагменты.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 26.08.2009 в 00:10. Причина: Внес исправления в код
viter.alex вне форума Ответить с цитированием
Старый 26.08.2009, 10:39   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Розетка в чуме

Да я было решил, что pavel.lug мои инструкции записал как макрокоманду — и её (по альт-F11) пытается отладить.

А 1000 раз выполнять поиск вручную — это, конечно, не comme il faut.

Последний раз редактировалось Sasha_Smirnov; 26.08.2009 в 16:52.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 26.08.2009, 12:55   #10
pavel.lug
 
Аватар для pavel.lug
 
Регистрация: 25.08.2009
Сообщений: 8
По умолчанию

Полночи пытался разобраться с программой Александра и пришел к выводу "Что я знаю, не чего я не знаю" (с)
Можно ли это как нибудь разжевать для особо "одаренных"
pavel.lug вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обрезать строку между двумя словами vitaleg PHP 3 28.07.2009 20:32
Связь между двумя ОС Яр|/||< (^_^) Общие вопросы Delphi 8 06.07.2009 20:45
Разделитель между словами в запросе artemavd БД в Delphi 10 20.05.2009 18:18
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09
Копирование файлов и каталогов перетаскиваением между двумя окнами SANTA_KLAUD Общие вопросы Delphi 3 28.05.2008 21:52