Поиск значений по XML файлам и их группировка
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Поиск значений по XML файлам и их группировка Author: Slamzor PostPosted: Wed Nov 08, 2017 18:45
    —
Приветствую.
Что есть:
Есть несколько сотен файлов в формате XML (700), которые содержат значения внутри тегов.
Что необходимо:
Провести поиск на совпадение значений. Значения могут совпадать полностью либо отчасти
например значения в файле XML: "Федеральный", "Международный", "Региональный"
В другом файле значения:
"Федерального значения, местные воздушные линии" и т.д.

Я провел сортировку файлов по имени файлов и у меня не должны пересекаться файлы по сути, такие как: "федеральные округа" и "федеральный аэропорт".

В итоге, файлы надо на корзины (папки, выделить и т.п.) раскидать при совпадении значений. Наверное нужен и параметр о том, сколько совпадений искать, чтобы совершать действие по "объединению" (переносу в корзину), но для начала мне бы понять можно это тоталом совершить? Может есть другие инструменты...

#2:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Nov 08, 2017 22:38
    —
Известно ли тебе, что:
1) Можно искать по части строки (например, "федер") со снятой птицей "Case sensitive"?
2) Поиск с логической функцией "И" осуществляется в несколько шагов:
а) Найти первую строку;
б) Поместить найденные файлы на панель (Feed to listbox);
в) Выделить все;
г) Найти вторую строку;
д) При необходимости повторить пп. б-г
Разве это не то, что нужно?

#3:  Author: Slamzor PostPosted: Wed Nov 08, 2017 22:52
    —
Да, про часть этих функций я знаю. Но я не знаю что искать и тем более что сопоставлять. Пока иду вот таким путем:
1. Все файлы объединил в один, смержил. При этом тащил еще и название файла.
2. Узнал, что мой основной тег "Наименование", но и он не всегда 100% попадание. По этому тащу все что есть.
3. Так как тащил все, притащил и много мусора в виде цифр. надо удалить на последующих этапах.
4. Не могу вставить данные в ексель, удаляю пустые параграфы, которые в ходе сборки появились.
5. Затем раскидаю на два столбца "имя файла" и его данные.
6. Сводная таблица.
7. Исходя из данных таблицы буду проводить сортировку и раскидку по корзинам используя инструменты, которые представлены в Ваших пунктах.

#4:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Nov 09, 2017 11:21
    —
Для работы с XML лучше использовать не просто обработку текста, а спец. механизмы, например, использовать объект "Msxml2.DOMDocument" в vbs.
Пока я совсем не понял, по какому принципу ищем совпадения.
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.

#5:  Author: Slamzor PostPosted: Thu Nov 09, 2017 18:57
    —
Добрый вечер.
Quote:
Пока я совсем не понял, по какому принципу ищем совпадения.

Очень образно скажу в 90% это текстовая информация, остальное 10% может быть число, но с текстом, например возраст, количество чего-либо и т.д.
Quote:
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?

в 90 % это тег "Наименование"
Quote:
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.

Проблема вся в этом, нет признаков и подходов, кроме как совпадение по тексту. Например, есть справочники страны, в которых есть совпадение "Россия", "США" любая другая. Либо субъект РФ (край, округ), может быть добавлен номер этого региона, пол человека, вид авиатранспорта. Тут необходимо вручную смотреть все, но срезы определенные автоматизировать надо.
Quote:
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.

<Наименование>Электровагоны</Наименование> (файл транспорт)
<Наименование>Грузовые вагоны</Наименование>(файл автотранспорт)

[/quote]

#6:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Nov 09, 2017 20:12
    —
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. Используй по усмотрению.

Это всё, что я могу сделать, исходя из твоего описания задачи. Извини. Ничего не понятно, а мне нужна конкретика.

#7:  Author: Ygg PostPosted: Wed Apr 03, 2019 15:17
    —
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
'====================================================



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group