Доброго времени суток. Подскажите кто сталкивался. Есть такой код.
Код
Sub XML_Replace()
Dim s, Stroka2 As String
Dim myRegExp As New RegExp
With myRegExp
.Global = True
.IgnoreCase = False
.MultiLine = False
.Pattern = ">\d{10}<|>\d{12}|>\d{13}<|>\d{15}<|>((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}<"
End With
Stroka2 = ">ПРАВЛЕНО<"
Open "C:\Users\17620635\Desktop\testxml.txt" For Input As #1 'Открываем файл функцией Open() на чтение(Input)
Open "C:\Users\17620635\Desktop\outputxml.txt" For Output As #4
While Not EOF(1)
Line Input #1, s
s = myRegExp.Replace(s, Stroka2)
Print #4, s
Wend
MsgBox vbInformation
Close #1
Close #4
End Sub
Вообщем есть большой XML файл и код убирает внутри тегов значения ИНН, ОГРН, Телефона. Проблема в том, что в документе, в том же формате что и телефон указанны даты. (xx-xx-xx). Как бы паттерн для всей строки одинаковый и заменяемое значение одно и то же для любого найденного значения. Если бы это был Python, я бы сделал список с строками для замены по условию содержания возвращаемой патерном строки. (типо если есть INN, то вернуть первую подстроку списка).
Подскажите, как для разных выражений возвращать разные строки? Если можно на примере. По следущей логике.
Код
If pat = ">\d{10}<|>\d{12}<" Then:
StrN = "INN>ПРАВЛЕНО<"
ElseIf pat = ">\d{13}<|>\d{15}<" Then:
StrN = "OGRN>ПРАВЛЕНО<"
ElseIf pat = ">((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}<" Then:
StrN = "Telephone>ПРАВЛЕНО<"
Argo9, здравствуйте! Сделайте файл-пример со строками "было" и "надо"
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
файл выгрузить вообще не могу никакой, к сожалению. Два кода выше (я их изменил), это по сути два текстовых документа. В входящем файле нужно заменять значения ИНН, ОГРН, Номера телефона на фразу "Замена"и выгружать в новый текстовый документ. Код в шапке с задачей справляется, но меняет кроме телефона и даты в документе. (так как они в такой же формате что и номер записываются).
Можно ли например сделать функцию, которая бы возвращала строку в зависимости от того какое регулярное выражение сработало. (например)
Argo9: файл выгрузить вообще не могу никакой, к сожалению
если вам лень самому сделать файл-пример, то не факт, что это будет интересно кому-то ещё + в приведённом "примере" нет дат, с которыми, по вашим словам можно спутать телефоны. Удачи!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Argo9, вы прикалываетесь??? СТРОКИ ИЗ #4 СКОПИРУЙТЕ В ФАЙЛ EXCEL и добавьте даты, а то вам дадут решение, а вы "ой - а с датами всё ещё путает" - А ПОТОМУ ЧТО У ВАС В ПРИМЕРЕ ДАТ НЕТУ
Если нельзя загрузить файл-пример, то загрузите ссылку на файлообменник
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Дмитрий(The_Prist) Щербаков, спасибо Дмитрий, я просто немного по другому представлял работу оператора "или". Теперь все встало на свои места. Благодарю.
Jack Famous, вам тоже спасибо за попутку помочь. Мой вопрос как мне казалось был элементарным и понятным, поэтому думается файл пример не был так нужен. bigorq, я не об этом, но и вам спасибо
еще маленький вопрос. Если я подключил библиотеку. Пользователю макроса ее нужно будет каждый раз включать? Просто каждый раз открывая книгу, приходиться в ручную включать ее.
Вообще так быть не должно. Подключили библиотеку -Сохранили файл. Ссылка на подключенную библиотеку должна сохраниться. Однако я привел код, который не требует подключения библиотеки в Tools -References, т.к. используется позднее связывание.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...