Имя: Пароль:
1C
1С v8
Как удалить строки по шаблону из текста?
,
0 D_Pavel
 
24.04.13
09:02
Есть текст XML, нужно удалить все строки типа <Адрес>*****</Адрес> чтобы сократить размер, где ***** каждый раз меняется. Как их все удалить? Поиск и замена по подстроке не поможет, так как искомая строка заранее не известна.
1 Wobland
 
24.04.13
09:03
можно просто не обращать внимания на адрес при чтении
2 Wobland
 
24.04.13
09:03
или даже не выгружать адрес при записи
3 Кирпич
 
24.04.13
09:04
Для этого придуманы регулярные выражения
4 D_Pavel
 
24.04.13
09:08
(1) не получится, тут нет разбора по строкам ПрочитатьXML(ЧтениеXML); Переписывать весь механизм не выгодно.
(2) Не получится, данные выгружаются командой  ЗаписатьXML(ЗаписьXML, Данные);
5 Рэйв
 
24.04.13
09:12
перебери xml как текст построчно, ищи в строке через Найти сначала <Адрес>и начиная с него формируй строку ан удаление до </Адрес> включительно.

Потом СтрЗаменить(СтрокаТекста,СтрНаУдаление,"")
6 Defender aka LINN
 
24.04.13
09:16
Регулярные выражения
7 Кирпич
 
24.04.13
09:17
Похоже, автор ожидает готовый вариант решения его проблемы. Те самые восемь строк, которые добрый дядя ему сюда запостит. Сейчас так модно.
8 Rie
 
24.04.13
09:17
(0)
Рег = Новый COMОбъект("VBScript.RegExp");
Рег.Pattern = "<Адрес>.*</Адрес>";
Рег.Global = Истина;
Рег.Replace(ТвойТекст,"");
9 Defender aka LINN
 
24.04.13
09:18
(7) А вот и дядя нашелся
10 Кирпич
 
24.04.13
09:18
:))
11 Кирпич
 
24.04.13
09:20
Интересно, спасибо скажет или нет.
12 D_Pavel
 
24.04.13
09:28
(5) Ну можно так...
13 D_Pavel
 
24.04.13
09:30
(8) Так уже сделал, не везде получилось.

   RegExp.Pattern = "(\<ТЧасть\>.+\<\/ТЧасть\>)";
   СтрокаОбмена=RegExp.Replace(СтрокаОбмена, "");


Не удаляется многострочный например такой текст:
           <ТЧасть>
               <Row>
                   <ФИО>Нургалиева Елена Геннадьевна</ФИО>
                   <Должность>директор</Должность>
                   <Дата>2007-09-13T00:00:00</Дата>
                   <ПаспортныеДанные/>
                   <Телефон/>
               </Row>
           </ТЧасть>
14 Wobland
 
24.04.13
09:31
(13) не так ты сделал
15 D_Pavel
 
24.04.13
09:33
(14) что не так?
16 Wobland
 
24.04.13
09:34
(15) у Rie звезда, у тебя плюс. но я тут не помощник, не помню тонкостей
17 Defender aka LINN
 
24.04.13
09:36
(13) Ну, кроме Pattern там еще пара-тройка свойств есть...
И на форуме тут Орефков, кажись, выкладывал ВК
18 D_Pavel
 
24.04.13
09:37
(16) звезда и плюс - это без разницы в данном случае, так как не может быть в этом месте меньше одного символа.
19 MSII
 
24.04.13
09:37
(13) Не соответствует твоя строка паттерну, вот и не удаляется.
20 D_Pavel
 
24.04.13
09:39
(17) все свойства ставил и истина, и -1, никакой разницы, все равно не находит.
21 D_Pavel
 
24.04.13
09:39
(19) Спасибо, К.О.
22 D_Pavel
 
24.04.13
09:40
(16) со звездой проверил тоже. Не находитю
23 MSII
 
24.04.13
09:42
(22) *? - а так?
24 orefkov
 
24.04.13
09:43
. - это любой символ, кроме перевода строки.
Если нужен действительно любой символ, надо использовать [\s\S]
И со звездочкой аккуратнее - удалит все от первого открывающего тега до последнего, лучше ее жадность обуздать знаком вопроса.
Вот так примерно:
<ТЧасть>[\s\S]*?<\/ТЧасть>
25 orefkov
 
24.04.13
09:45
26 orefkov
 
24.04.13
10:05
+(24) Проверил, все находит:
http://snegopat.ru/files/tmp/regex1.png
27 Defender aka LINN
 
24.04.13
10:20
VBScript.RegExp тоже находит :)
28 orefkov
 
24.04.13
10:25
(27)
На скриншоте как раз он и работает, вернее его брат из JScript :)
Пост был не про мою ВК, а про правильный шаблон поиска.
29 D_Pavel
 
24.04.13
11:06
(23) А так вот как получается: Ошибка при вызове метода контекста (Replace)
по причине:
Произошла исключительная ситуация (0x800a139a)
30 D_Pavel
 
24.04.13
11:32
(24) Спасибо, так само то!
31 D_Pavel
 
24.04.13
13:37
Не работает!
Как удалить строку только в нужных местах?
Например нужно удалить <Адрес/> ТОЛЬКО внутри конструкции "<Удалять>":

<НеУдалять>
   <Адрес/>
</НеУдалять>
<Удалять>
   <Адрес/>
</Удалять>


У меня получается что везде удаляет.
32 D_Pavel
 
24.04.13
13:45
А, все, сам разобрался.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан