Вопрос: Как удалить все "объекты" (уже средствами excel), а именно фрагменты, включая от <RecordedObject> до </RecordedObject>, внутри которых содержится определённый набор символов, например: +*22
Уважаемые, добрый день! Подскажите как решить такую задачу.
Есть xml-файл вида: (в примере ниже два однородных "объекта")
Вопрос: Как удалить все "объекты" (уже средствами excel), а именно фрагменты, включая от <RecordedObject> до </RecordedObject>, внутри которых содержится определённый набор символов, например: +*22Jingo
Не сложная - а непонятная. Что должно получится в итоге? Если нужно оставить только теги - то это легко можно сделать UDFкой:
Function TB(ByVal txt$, ByVal part1$, ByVal part2$, ByVal sep$) OnErrorResumeNext Dim Arr, i, res$ SelectCase"" Case part1$ & part2$: TB = txt: ExitFunction Case part1$: Arr = Split(txt, part2$): Arr(UBound(Arr)) = "" Case part2$: Arr = Split(txt, part1$): Arr(0) = "" CaseElse: Arr = Split(txt, part1$)
Arr(0) = "" For i = LBound(Arr) ToUBound(Arr) IfInStr(1, Arr(i), part2$, vbTextCompare) Then
Arr(i) = Split(Arr(i), part2$)(0) EndIf Next i EndSelect
txt = Join(Arr, sep$) If sep$ = ""Then TB = txt: ExitFunction WhileInStr(1, txt$, sep$ & sep$, vbBinaryCompare): txt$ = Replace(txt$, sep$ & sep$, sep$): Wend If txt$ Like"*" & sep$ Then txt = Left(txt, Len(txt) - Len(sep$)) If txt$ Like sep$ & "*"Then txt = Mid(txt, Len(sep$) + 1)
TB = txt EndFunction
Тогда формула будет:
"<" & tb(A1;"<";">";"><") &">"
или
Function RegExpFindText(str AsString, _
pattern AsString, _ Optional Globa1 AsBoolean = True, _ Optional IgnoreCase AsBoolean = False, _ Optional Multiline AsBoolean = False, Optional spl$ = " ") AsString Dim m() AsString, i& Dim matches AsObject'Коллекция совпадений Dim match AsObject'Отдельное совпадение IfNot pattern Like""Then
Dim REGEXP AsObject'Для регулярных выражений
Set REGEXP = CreateObject("VBScript.RegExp") With REGEXP
.Global = Globa1 'Находим все совпадения или только первое
.IgnoreCase = IgnoreCase 'Учитываем ли регистр?
.Multiline = Multiline 'Может ли паттерн попадать на разрывы строк?
.pattern = pattern 'Выражение EndWith
OnErrorResumeNext Set matches = REGEXP.Execute(str) 'Получаем коллекцию совпадений ReDim m(1To matches.Count) Set REGEXP = Nothing'Очистка памяти от ненужного мусора
For Each match In matches
i = i + 1
m(i) = match.Value ' Debug.Print match.Value Next
RegExpFindText = Join(m, spl) EndIf EndFunction
Не сложная - а непонятная. Что должно получится в итоге? Если нужно оставить только теги - то это легко можно сделать UDFкой:
Function TB(ByVal txt$, ByVal part1$, ByVal part2$, ByVal sep$) OnErrorResumeNext Dim Arr, i, res$ SelectCase"" Case part1$ & part2$: TB = txt: ExitFunction Case part1$: Arr = Split(txt, part2$): Arr(UBound(Arr)) = "" Case part2$: Arr = Split(txt, part1$): Arr(0) = "" CaseElse: Arr = Split(txt, part1$)
Arr(0) = "" For i = LBound(Arr) ToUBound(Arr) IfInStr(1, Arr(i), part2$, vbTextCompare) Then
Arr(i) = Split(Arr(i), part2$)(0) EndIf Next i EndSelect
txt = Join(Arr, sep$) If sep$ = ""Then TB = txt: ExitFunction WhileInStr(1, txt$, sep$ & sep$, vbBinaryCompare): txt$ = Replace(txt$, sep$ & sep$, sep$): Wend If txt$ Like"*" & sep$ Then txt = Left(txt, Len(txt) - Len(sep$)) If txt$ Like sep$ & "*"Then txt = Mid(txt, Len(sep$) + 1)
TB = txt EndFunction
Тогда формула будет:
"<" & tb(A1;"<";">";"><") &">"
или
Function RegExpFindText(str AsString, _
pattern AsString, _ Optional Globa1 AsBoolean = True, _ Optional IgnoreCase AsBoolean = False, _ Optional Multiline AsBoolean = False, Optional spl$ = " ") AsString Dim m() AsString, i& Dim matches AsObject'Коллекция совпадений Dim match AsObject'Отдельное совпадение IfNot pattern Like""Then
Dim REGEXP AsObject'Для регулярных выражений
Set REGEXP = CreateObject("VBScript.RegExp") With REGEXP
.Global = Globa1 'Находим все совпадения или только первое
.IgnoreCase = IgnoreCase 'Учитываем ли регистр?
.Multiline = Multiline 'Может ли паттерн попадать на разрывы строк?
.pattern = pattern 'Выражение EndWith
OnErrorResumeNext Set matches = REGEXP.Execute(str) 'Получаем коллекцию совпадений ReDim m(1To matches.Count) Set REGEXP = Nothing'Очистка памяти от ненужного мусора
For Each match In matches
i = i + 1
m(i) = match.Value ' Debug.Print match.Value Next
RegExpFindText = Join(m, spl) EndIf EndFunction
Здравствуйте. Было бы луче увидеть этот кусочек данных в файле. Эти группы размещены в одной ячейки или каждая строчка в отдельной ячейке?В первом примере нет разделения как во втором, пустая ячейка между группами. Всегда по разному может быть?
Здравствуйте. Было бы луче увидеть этот кусочек данных в файле. Эти группы размещены в одной ячейки или каждая строчка в отдельной ячейке?В первом примере нет разделения как во втором, пустая ячейка между группами. Всегда по разному может быть?gling
Здравствуйте. Было бы луче увидеть этот кусочек данных в файле. Эти группы размещены в одной ячейки или каждая строчка в отдельной ячейке?В первом примере нет разделения как во втором, пустая ячейка между группами. Всегда по разному может быть?
Доброе утро. Прикрепил csv-файл с данными из текста xml-файла.
Открывающий и закрывающий тег объекта: <RecordedObject> и </RecordedObject>
Задача: поиск+удаление всех объектов, содержащих те или иные символы.
Здравствуйте. Было бы луче увидеть этот кусочек данных в файле. Эти группы размещены в одной ячейки или каждая строчка в отдельной ячейке?В первом примере нет разделения как во втором, пустая ячейка между группами. Всегда по разному может быть?
Доброе утро. Прикрепил csv-файл с данными из текста xml-файла.
Открывающий и закрывающий тег объекта: <RecordedObject> и </RecordedObject>
Задача: поиск+удаление всех объектов, содержащих те или иные символы.Jingo