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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 15:22   #1
Alex_n
 
Регистрация: 10.02.2015
Сообщений: 3
Вопрос Нужна помощь.

Добрый день!
Нужна помощь в доработке скрипта.
Есть такой текст (очень много...около 6 Мб):

Код HTML:
<offer id="312454" available="true">
<url>http://sbantom.ru/catalog/salatniki/312454.html?r1=<?echo $_GET["referer1"] ?>&amp;r2=<?echo $_GET["referer2"] ?></url>
<price>1600.00</price>
<currencyId>RUB</currencyId>
<categoryId>11112</categoryId>
<name>Набор салатников Джапоника &amp;quot;Версаль&amp;quot; 2шт</name>
<description>Набор салатников Джапоника &amp;quot;Версаль&amp;quot; 2шт</description>
</offer>
<offer id="353113" available="false">
<url>http://sbantom.ru/catalog/salatniki/353113.html?r1=<?echo $_GET["referer1"] ?>&amp;r2=<?echo $_GET["referer2"] ?></url>
<price>975.00</price>
<currencyId>RUB</currencyId>
<categoryId>11112</categoryId>
<picture>http://sbantom.ru/upload/iblock/52b/fotoUtah4665.png</picture>
<name>Набор из 2 салатников 13см KEITO &amp;quot;Бакенгем&amp;quot;</name>
<description>Набор из 2 салатников 13см KEITO &amp;quot;Бакенгем&amp;quot;</description>
</offer>
Блоки начинаются с "<offer>" и заканчиваются "</offer>"
Признак блока: available=""
Задача: найти блоки с признаком "false" и удалить их.

Написал вот такой скрипт:
Первая часть - находим признак false, ставим курсор в начало блока.
Вторая часть - находим окончание блока, удаляем блок.

Код:
Sub Макросяка_False()

Selection.HomeKey unit:=wdStory 'Перевод курсора в начало документа
For i = 1 To 250   'Если не делать ограничений по циклу поиска, зависает 
                               'комп, приходится ограничивать
With Selection.Find
    .Text = "false"
    .Wrap = wdFindStop
    .Format = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .Execute
    If .Found Then
    Selection.HomeKey unit:=wdLine
    
Else
    
    MsgBox "False закончились, УРА!", vbExclamation
    Exit Sub
    End If
End With
With Selection.Find
    .Text = "*offerq"    'Чтобы находил нужный offer приходится к "/offer" 
                                            'добавлять "q"
    .Wrap = wdFindStop
    .Format = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .Execute
    Selection.Delete
    
End With

Next
End Sub
В общем вопросы:
как сдвинуть конец выделения на один символ чтобы захватывал ">" , а то потом после отработки скрипта приходится много править. А закрывающий тег скрипт не принимает.
Есть ли вариант упростить скрипт, чтобы он отрабатывал весь документ без пауз (без зависаний).
Спасибо.
Alex_n вне форума Ответить с цитированием
Старый 10.02.2015, 16:26   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробуйте поиск-замену с галкой Подстановочные знаки с такой маской:
Код:
[<]offer id="[0-9]@" available="false"[>]*[<]/offer[>]^13
Сначала нажимайте Найти далее и убедитесь, что Ворд выделяет правильные куски, потом Заменить все.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 10.02.2015, 19:27   #3
Alex_n
 
Регистрация: 10.02.2015
Сообщений: 3
Хорошо

Цитата:
Сообщение от Казанский Посмотреть сообщение
Попробуйте поиск-замену с галкой Подстановочные знаки с такой маской:
Код:
[<]offer id="[0-9]@" available="false"[>]*[<]/offer[>]^13
Сначала нажимайте Найти далее и убедитесь, что Ворд выделяет правильные куски, потом Заменить все.
C'est genial!
Абсолютно просто и работает. Причем работает в 100500 раз быстрее чем скрипт.
Спасибо!
Alex_n вне форума Ответить с цитированием
Старый 11.02.2015, 00:13   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

А что навело вас на мысль именно о скрипте (макросе), а не о поиске по шаблону (маске)?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 11.02.2015, 22:58   #5
Alex_n
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию

Да я и не знал что так можно простой формой Найти/Заменить сделать.
Думал исключительно скриптом. А тут вон оно как. Прогресс.
Alex_n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь :) counter Свободное общение 8 22.05.2014 22:32
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Нужна помощь!!! Anil Помощь студентам 0 04.12.2007 17:32