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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 15:11   #1
andresss
 
Аватар для andresss
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию Задача: Замена слов местами в Microsoft Office Word

Привет друзья!

прошу вашей помощи в решении следующей задачи:

дано
Цитата:
BREINER, Laurence A. bla bla bla bla bla bla bla bla
BREIVIK, Patricia Senn. bla bla bla bla bla bla bla bla
BRENNER, Joël Glenn. bla bla bla bla bla bla bla bla
нужно
Цитата:
Laurence A BREINER. bla bla bla bla bla bla bla bla
Patricia Senn BREIVIK. bla bla bla bla bla bla bla bla
Joël Glenn BRENNER. bla bla bla bla bla bla bla bla
- что то вроде фамилию и имя правильно проставить
- в исходном файле всё одинаково, после первого слова идёт запятая, в конце точка



за ранее благодарю
andresss вне форума Ответить с цитированием
Старый 04.01.2011, 09:30   #2
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Искать
(<*>)(,)(^32)(*)(.)
с подстановочными знаками, полужирное

Менять на
\4 \1
garik64 вне форума Ответить с цитированием
Старый 05.01.2011, 17:30   #3
andresss
 
Аватар для andresss
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

чет не получается, а если без жирного, просто замена, то как?
andresss вне форума Ответить с цитированием
Старый 06.01.2011, 08:49   #4
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Что значит "не получается"? Всё получается. Либо Вы искали без подстановочных знаков, либо пример не отражает реального текста.

Но вот мне что пришло в голову: если фамилия будет двойная, типа "Иванов-Скворцов", тогда не сработает. Значит, делаем чуть по-другому (опять с подстановочными знаками):

Искать:

(^13)([A-Za-zА-Яа-я^32\-]@)(,)(^32)(*)(.)

Если вместо нормальных абзацев стоят мягкие – вместо (^13) писать (^l)

Менять на:

\1\5 \2

В любом случае - пример реального документа в студию!

Смысла нет помогать человеку, не зная точно, чего ему надо.
garik64 вне форума Ответить с цитированием
Старый 07.01.2011, 10:43   #5
andresss
 
Аватар для andresss
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

вот пример, это пдф файл изначально



там попадаются фамилии не только тройные, из четырех частей тоже

(там где скобки попадаются я их поудаляю)

спасибо за помощь
andresss вне форума Ответить с цитированием
Старый 07.01.2011, 16:12   #6
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Да картинка-то зачем? И пдф не нужен. Вы ведь этот файл распознаёте и перегоняете в Ворд, верно? Вот и приложите кусок такого вордовского документа - просто вложением, не надо на стороннем хостинге. Это нужно затем, чтобы понять, где в нём знаки абзаца, где мягкие переносы и т.п.

Например, если каждая строка будет заканчиваться концом абзаца, тогда, конечно, получится фигня. Потребуется ещё одна предварительная операция.

Цитата:
там попадаются фамилии не только тройные, из четырех частей тоже
На всех должно сработать одинаково. Пока я не вижу, почему не срабатывает. Вероятно, Вы не ставите птичку "использовать подстановочные знаки".
garik64 вне форума Ответить с цитированием
Старый 07.01.2011, 20:46   #7
andresss
 
Аватар для andresss
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

еще раз спасибо за помощь

срабатывает как то через один, вот пример:
Вложения
Тип файла: zip 1-example.zip (8.0 Кб, 13 просмотров)
andresss вне форума Ответить с цитированием
Старый 08.01.2011, 07:56   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Простым перебором абзацев:
Код:
Sub SwapWords()
  Dim oRng As Range, oRngTemp As Range
  Dim oDoc As Document
  Dim sFirtsWord As String
  Dim oPar As Paragraph
  
  
  Set oDoc = ActiveDocument
  Set oPar = oDoc.Paragraphs.First
  
  Do Until oPar Is Nothing
    With oPar
      'Если абзац не пустой
      If Asc(.Range.Characters.First.Text) <> 13 Then
        'Запоминаем первое слово и удаляем его
        sFirtsWord = .Range.Words.First
        .Range.Words.First.Select 'Это для того, чтобы был виден процесс обработки
        .Range.Words.First.Delete
        'Теперь работаем с началом абзаца, чтобы удалить запятую и пробел
        Set oRngTemp = oDoc.Range(.Range.Start, .Range.Start)
        With oRngTemp
          .SetRange .Start, .End + .MoveEndUntil(" ")
          .Delete
        End With
        'Ищем, где оканчивается имя автора (первая точка с начала абзаца _
        и вставляем перед точкой запомненную фамилию с пробелом
        Set oRngTemp = oDoc.Range(.Range.Start, .Range.Start)
        With oRngTemp
          .SetRange .Start, .End + .MoveEndUntil(".") - 1
          .InsertAfter " " & sFirtsWord
        End With
      End If
      'Переход к следующему абзацу
      Set oPar = .Next
      DoEvents
    End With
  Loop
End Sub
Или с помощью поиска и замены с подстановочными знаками:
Код:
Sub SwapWords2()
  With ActiveDocument.Range.Find
    .Text = "(<[A-Z^0032]@>)(, )([A-z^0032\(\)]@)(\.)"
    .Font.Bold = True
    .Replacement.Text = "\3 \1\4"
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 08.01.2011, 10:58   #9
andresss
 
Аватар для andresss
 
Регистрация: 03.01.2011
Сообщений: 6
По умолчанию

viter.alex первый макрос отлично справился!

большое всем спасибо :-)

p.s. a можно ли для каждого абзаца сделать следующее:
взять первое предложение до точки, запомнить его и вставить над самим абзацем.
example:

Цитата:
Edward Marriott
Edward Marriott. British, b. 1966. Genres: Travel/Exploration. Career: Author, journalist, and broadcaster. Works at Evening Standard. Publications: The Lost Tribe: A Harrowing Passage into New Guinea’s Heart of Darkness, 1997; Savage Shore: Life and Death with Nicaragua’s Last Shark Hunters, 2000. Address: c/o Evening Standard, Northcliffe House, 2 Derry St., London W8 5TT, England.
andresss вне форума Ответить с цитированием
Старый 08.01.2011, 11:05   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от andresss Посмотреть сообщение
viter.alex первый макрос отлично справился!…
А второй не справился?

Ответ на вопрос: можно!
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft Office Word Разрыв страниц и растягивание DuBy Microsoft Office Word 7 27.02.2010 13:12
Замена слов в Office noMaster Microsoft Office Word 2 19.12.2009 19:05
замена слов в MS Word polov Общие вопросы Delphi 4 09.10.2009 18:29
Тем кто ищет Microsoft Office Word, здесь есть шаблон, с макросами OMO Microsoft Office Word 4 22.01.2009 03:46
Delphi и Microsoft Office Word Максим_Леонидович Общие вопросы Delphi 5 17.01.2009 14:34