Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Поиск значений по XML файлам и их группировка

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Slamzor



Joined: 26 May 2013
Posts: 19

Post (Separately) Posted: Wed Nov 08, 2017 18:45    Post subject: Поиск значений по XML файлам и их группировка Reply with quote

Приветствую.
Что есть:
Есть несколько сотен файлов в формате XML (700), которые содержат значения внутри тегов.
Что необходимо:
Провести поиск на совпадение значений. Значения могут совпадать полностью либо отчасти
например значения в файле XML: "Федеральный", "Международный", "Региональный"
В другом файле значения:
"Федерального значения, местные воздушные линии" и т.д.

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

В итоге, файлы надо на корзины (папки, выделить и т.п.) раскидать при совпадении значений. Наверное нужен и параметр о том, сколько совпадений искать, чтобы совершать действие по "объединению" (переносу в корзину), но для начала мне бы понять можно это тоталом совершить? Может есть другие инструменты...
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Wed Nov 08, 2017 22:38    Post subject: Reply with quote

Известно ли тебе, что:
1) Можно искать по части строки (например, "федер") со снятой птицей "Case sensitive"?
2) Поиск с логической функцией "И" осуществляется в несколько шагов:
а) Найти первую строку;
б) Поместить найденные файлы на панель (Feed to listbox);
в) Выделить все;
г) Найти вторую строку;
д) При необходимости повторить пп. б-г
Разве это не то, что нужно?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Slamzor



Joined: 26 May 2013
Posts: 19

Post (Separately) Posted: Wed Nov 08, 2017 22:52    Post subject: Reply with quote

Да, про часть этих функций я знаю. Но я не знаю что искать и тем более что сопоставлять. Пока иду вот таким путем:
1. Все файлы объединил в один, смержил. При этом тащил еще и название файла.
2. Узнал, что мой основной тег "Наименование", но и он не всегда 100% попадание. По этому тащу все что есть.
3. Так как тащил все, притащил и много мусора в виде цифр. надо удалить на последующих этапах.
4. Не могу вставить данные в ексель, удаляю пустые параграфы, которые в ходе сборки появились.
5. Затем раскидаю на два столбца "имя файла" и его данные.
6. Сводная таблица.
7. Исходя из данных таблицы буду проводить сортировку и раскидку по корзинам используя инструменты, которые представлены в Ваших пунктах.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Nov 09, 2017 11:21    Post subject: Reply with quote

Для работы с XML лучше использовать не просто обработку текста, а спец. механизмы, например, использовать объект "Msxml2.DOMDocument" в vbs.
Пока я совсем не понял, по какому принципу ищем совпадения.
Во-первых, по какому точно пути (путям) в xml-дереве смотрим значения?
Далее, по какому принципу эти значения сравниваем? Это какой-то определённый перечень искомых значений (частей значений) или это чётко определённая часть значения (первого слова значения), например, 8 первых символов или все символы, кроме последних 3-х? Нужна абсолютно однозначная логика для получения сравниваемых значений.
Ну и нужны несколько реальных примеров. Всё содержимое xml-файлов приводить не надо, но надо видеть нужные ветки со значениями, которые по твоему мнению соответствуют друг другу.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Slamzor



Joined: 26 May 2013
Posts: 19

Post (Separately) Posted: Thu Nov 09, 2017 18:57    Post subject: Reply with quote

Добрый вечер.
Quote:
Пока я совсем не понял, по какому принципу ищем совпадения.

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

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

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

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

[/quote]
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Nov 09, 2017 20:12    Post subject: Reply with quote

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
View user's profile Send private message
Ygg



Joined: 10 Dec 2018
Posts: 2

Post (Separately) Posted: Wed Apr 03, 2019 15:17    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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