Поиск значений по XML файлам и их группировка
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Поиск значений по XML файлам и их группировка
Приветствую.
Что есть:
Есть несколько сотен файлов в формате XML (700), которые содержат значения внутри тегов.
Что необходимо:
Провести поиск на совпадение значений. Значения могут совпадать полностью либо отчасти
например значения в файле XML: "Федеральный", "Международный", "Региональный"
В другом файле значения:
"Федерального значения, местные воздушные линии" и т.д.
Я провел сортировку файлов по имени файлов и у меня не должны пересекаться файлы по сути, такие как: "федеральные округа" и "федеральный аэропорт".
В итоге, файлы надо на корзины (папки, выделить и т.п.) раскидать при совпадении значений. Наверное нужен и параметр о том, сколько совпадений искать, чтобы совершать действие по "объединению" (переносу в корзину), но для начала мне бы понять можно это тоталом совершить? Может есть другие инструменты...
Что есть:
Есть несколько сотен файлов в формате XML (700), которые содержат значения внутри тегов.
Что необходимо:
Провести поиск на совпадение значений. Значения могут совпадать полностью либо отчасти
например значения в файле XML: "Федеральный", "Международный", "Региональный"
В другом файле значения:
"Федерального значения, местные воздушные линии" и т.д.
Я провел сортировку файлов по имени файлов и у меня не должны пересекаться файлы по сути, такие как: "федеральные округа" и "федеральный аэропорт".
В итоге, файлы надо на корзины (папки, выделить и т.п.) раскидать при совпадении значений. Наверное нужен и параметр о том, сколько совпадений искать, чтобы совершать действие по "объединению" (переносу в корзину), но для начала мне бы понять можно это тоталом совершить? Может есть другие инструменты...
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Известно ли тебе, что:
1) Можно искать по части строки (например, "федер") со снятой птицей "Case sensitive"?
2) Поиск с логической функцией "И" осуществляется в несколько шагов:
а) Найти первую строку;
б) Поместить найденные файлы на панель (Feed to listbox);
в) Выделить все;
г) Найти вторую строку;
д) При необходимости повторить пп. б-г
Разве это не то, что нужно?
1) Можно искать по части строки (например, "федер") со снятой птицей "Case sensitive"?
2) Поиск с логической функцией "И" осуществляется в несколько шагов:
а) Найти первую строку;
б) Поместить найденные файлы на панель (Feed to listbox);
в) Выделить все;
г) Найти вторую строку;
д) При необходимости повторить пп. б-г
Разве это не то, что нужно?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Да, про часть этих функций я знаю. Но я не знаю что искать и тем более что сопоставлять. Пока иду вот таким путем:
1. Все файлы объединил в один, смержил. При этом тащил еще и название файла.
2. Узнал, что мой основной тег "Наименование", но и он не всегда 100% попадание. По этому тащу все что есть.
3. Так как тащил все, притащил и много мусора в виде цифр. надо удалить на последующих этапах.
4. Не могу вставить данные в ексель, удаляю пустые параграфы, которые в ходе сборки появились.
5. Затем раскидаю на два столбца "имя файла" и его данные.
6. Сводная таблица.
7. Исходя из данных таблицы буду проводить сортировку и раскидку по корзинам используя инструменты, которые представлены в Ваших пунктах.
1. Все файлы объединил в один, смержил. При этом тащил еще и название файла.
2. Узнал, что мой основной тег "Наименование", но и он не всегда 100% попадание. По этому тащу все что есть.
3. Так как тащил все, притащил и много мусора в виде цифр. надо удалить на последующих этапах.
4. Не могу вставить данные в ексель, удаляю пустые параграфы, которые в ходе сборки появились.
5. Затем раскидаю на два столбца "имя файла" и его данные.
6. Сводная таблица.
7. Исходя из данных таблицы буду проводить сортировку и раскидку по корзинам используя инструменты, которые представлены в Ваших пунктах.
Для работы с XML лучше использовать не просто обработку текста, а спец. механизмы, например, использовать объект "Msxml2.DOMDocument" в vbs.
Пока я совсем не понял, по какому принципу ищем совпадения.
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.
Пока я совсем не понял, по какому принципу ищем совпадения.
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.
Нет, я не сплю. Я просто медленно моргаю.
Добрый вечер.
<Наименование>Грузовые вагоны</Наименование>(файл автотранспорт)
[/quote]
Очень образно скажу в 90% это текстовая информация, остальное 10% может быть число, но с текстом, например возраст, количество чего-либо и т.д.Пока я совсем не понял, по какому принципу ищем совпадения.
в 90 % это тег "Наименование"Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Проблема вся в этом, нет признаков и подходов, кроме как совпадение по тексту. Например, есть справочники страны, в которых есть совпадение "Россия", "США" любая другая. Либо субъект РФ (край, округ), может быть добавлен номер этого региона, пол человека, вид авиатранспорта. Тут необходимо вручную смотреть все, но срезы определенные автоматизировать надо.Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
<Наименование>Электровагоны</Наименование> (файл транспорт)Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.
<Наименование>Грузовые вагоны</Наименование>(файл автотранспорт)
[/quote]
Slamzor
Нда, ясности не появилось. Всё какие-то расплывчатые фразы.
Даже пример урезан "до нЕльзя".
В таком случае, вот vbs-скрипт для WSACP:
Положи этот скрипт с именем GetXmlVlue.vbs в подпапку Scripts плагина, в настройках плагина в options.ini добавь в конце строки:
Настрой колонку "Наименование" и перезапусти TC. Используй по усмотрению.
Это всё, что я могу сделать, исходя из твоего описания задачи. Извини. Ничего не понятно, а мне нужна конкретика.
Нда, ясности не появилось. Всё какие-то расплывчатые фразы.
Даже пример урезан "до нЕльзя".
В таком случае, вот vbs-скрипт для WSACP:
Код: Выделить всё
'====================================================
' Возвращаемые значения:
' 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и секцию:options.ini писал(а):[Script]
ActiveScripts=MinutesAgo|CheckEncoding|Signature|GetXmlVlue
Код: Выделить всё
[GetXmlVlue]
Script=GetXmlVlue.vbs
content=Наименование
extensions=*
FoldersPaths=0Это всё, что я могу сделать, исходя из твоего описания задачи. Извини. Ничего не понятно, а мне нужна конкретика.
Нет, я не сплю. Я просто медленно моргаю.
Batya
спасибо за идею по поводу Msxml2.DOMDocument
спасибо за идею по поводу Msxml2.DOMDocument
Код: Выделить всё
'====================================================
' Возвращаем значения атрибутов файлов 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
'====================================================