View previous topic :: View next topic |
Author |
Message |
Slamzor
Joined: 26 May 2013 Posts: 19
|
(Separately) Posted: Wed Nov 08, 2017 18:45 Post subject: Поиск значений по XML файлам и их группировка |
|
|
Приветствую.
Что есть:
Есть несколько сотен файлов в формате XML (700), которые содержат значения внутри тегов.
Что необходимо:
Провести поиск на совпадение значений. Значения могут совпадать полностью либо отчасти
например значения в файле XML: "Федеральный", "Международный", "Региональный"
В другом файле значения:
"Федерального значения, местные воздушные линии" и т.д.
Я провел сортировку файлов по имени файлов и у меня не должны пересекаться файлы по сути, такие как: "федеральные округа" и "федеральный аэропорт".
В итоге, файлы надо на корзины (папки, выделить и т.п.) раскидать при совпадении значений. Наверное нужен и параметр о том, сколько совпадений искать, чтобы совершать действие по "объединению" (переносу в корзину), но для начала мне бы понять можно это тоталом совершить? Может есть другие инструменты... |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Wed Nov 08, 2017 22:38 Post subject: |
|
|
Известно ли тебе, что:
1) Можно искать по части строки (например, "федер") со снятой птицей "Case sensitive"?
2) Поиск с логической функцией "И" осуществляется в несколько шагов:
а) Найти первую строку;
б) Поместить найденные файлы на панель (Feed to listbox);
в) Выделить все;
г) Найти вторую строку;
д) При необходимости повторить пп. б-г
Разве это не то, что нужно? _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Slamzor
Joined: 26 May 2013 Posts: 19
|
(Separately) Posted: Wed Nov 08, 2017 22:52 Post subject: |
|
|
Да, про часть этих функций я знаю. Но я не знаю что искать и тем более что сопоставлять. Пока иду вот таким путем:
1. Все файлы объединил в один, смержил. При этом тащил еще и название файла.
2. Узнал, что мой основной тег "Наименование", но и он не всегда 100% попадание. По этому тащу все что есть.
3. Так как тащил все, притащил и много мусора в виде цифр. надо удалить на последующих этапах.
4. Не могу вставить данные в ексель, удаляю пустые параграфы, которые в ходе сборки появились.
5. Затем раскидаю на два столбца "имя файла" и его данные.
6. Сводная таблица.
7. Исходя из данных таблицы буду проводить сортировку и раскидку по корзинам используя инструменты, которые представлены в Ваших пунктах. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Thu Nov 09, 2017 11:21 Post subject: |
|
|
Для работы с XML лучше использовать не просто обработку текста, а спец. механизмы, например, использовать объект "Msxml2.DOMDocument" в vbs.
Пока я совсем не понял, по какому принципу ищем совпадения.
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Slamzor
Joined: 26 May 2013 Posts: 19
|
(Separately) Posted: Thu Nov 09, 2017 18:57 Post subject: |
|
|
Добрый вечер.
Quote: | Пока я совсем не понял, по какому принципу ищем совпадения.
|
Очень образно скажу в 90% это текстовая информация, остальное 10% может быть число, но с текстом, например возраст, количество чего-либо и т.д.
Quote: | Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения? |
в 90 % это тег "Наименование"
Quote: | Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений. |
Проблема вся в этом, нет признаков и подходов, кроме как совпадение по тексту. Например, есть справочники страны, в которых есть совпадение "Россия", "США" любая другая. Либо субъект РФ (край, округ), может быть добавлен номер этого региона, пол человека, вид авиатранспорта. Тут необходимо вручную смотреть все, но срезы определенные автоматизировать надо.
Quote: | Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу. |
<Наименование>Электровагоны</Наименование> (файл транспорт)
<Наименование>Грузовые вагоны</Наименование>(файл автотранспорт)
[/quote] |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Thu Nov 09, 2017 20:12 Post subject: |
|
|
Slamzor
Нда, ясности не появилось. Всё какие-то расплывчатые фразы.
Даже пример урезан "до нЕльзя".
В таком случае, вот vbs-скрипт для WSACP:
Code: | '====================================================
' Возвращаемые значения:
' 0: Значение элемента "Наименование"
'====================================================
content = Result(filename)
Function Result(pFile)
Dim Node
Result = ""
On Error Resume Next
Set Node = LoadXML(pFile).selectSingleNode("//Наименование")
If Not Node is Nothing Then Result = Node.text
' If Err.Number <> 0 Then Result = Err.Description
If Err.Number <> 0 Then Result = ""
On Error GoTo 0
Set Node = Nothing
End Function
Function LoadXML(pFile)
Set LoadXML = CreateObject("Msxml2.DOMDocument")
LoadXML.async = False
LoadXML.load pFile
End Function |
Положи этот скрипт с именем GetXmlVlue.vbs в подпапку Scripts плагина, в настройках плагина в options.ini добавь в конце строки:
options.ini wrote: | [Script]
ActiveScripts=MinutesAgo|CheckEncoding|Signature|GetXmlVlue | и секцию: Code: | [GetXmlVlue]
Script=GetXmlVlue.vbs
content=Наименование
extensions=*
FoldersPaths=0 |
Настрой колонку "Наименование" и перезапусти TC. Используй по усмотрению.
Это всё, что я могу сделать, исходя из твоего описания задачи. Извини. Ничего не понятно, а мне нужна конкретика. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Ygg
Joined: 10 Dec 2018 Posts: 2
|
(Separately) Posted: Wed Apr 03, 2019 15:17 Post subject: |
|
|
Batya
спасибо за идею по поводу Msxml2.DOMDocument
Code: |
'====================================================
' Возвращаем значения атрибутов файлов ffxml
' (фильтров Filter Forge)
' 2019/04/03
'====================================================
Set xmlParser = CreateObject("Msxml2.DOMDocument")
xmlParser.async = False
xmlParser.load filename
On Error Resume Next
Set Node = xmlParser.selectSingleNode("//Information")
If Not Node is Nothing Then
content = Node.getAttribute("author")
content1 = Node.getAttribute("name-en")
content2 = Node.getAttribute("description-en")
content3 = Node.getAttribute("keywords-en")
End If
On Error GoTo 0
Set Node = Nothing
'====================================================
' Option.ini section
' [SearchInFFXML]
' Script=SearchInFFXML.vbs
' content=Author
' content1=Name
' content2=Description
' content3=Keywords
' extensions=ffxml
' FoldersPaths=0
'====================================================
|
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|