Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Logparser выбор и сравнение полей из xml файлов

Ответить
Настройки темы
Любой язык - [решено] Logparser выбор и сравнение полей из xml файлов

Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: gremlintv2
Дата: 23-08-2016
Вроде как немного волоку в sql запросах, но немного погуглив и почитав примеры работы с Logparseroм, решил не экспериментировать, а спросить знающих людей итак тз:
Есть xml файлы, внутри кракозябры и поля типа <FILENAME>,<SOFTWARE> ,<DOCTYPE> и мн.др.
Мне нужно, чтобы Logparser выбрал значения этих полей, с привязкой к названию файла, например:

1.xml

<FILENAME>file1</FILENAME>
<SOFTWARE>soft1</SOFTWARE>
<DOCTYPE>type1</DOCTYPE>

2.xml

<FILENAME>file2</FILENAME>
<DOCTYPE>type2</DOCTYPE>

результат

FILE FILENAME SOFTWARE DOCTYPE
1___file1_____soft1_____ type1
2___file2______________type2


Пробовал выбирать ставя тип лога "XMLLOG" - выдает ошибку(не в конкретном примере, а с моими xml файлами): "В текстовом комментарии обнаружен недопустимый знак"
Пробовал выбирать ставя тип лога "TEXTLINELOG" :
SELECT Text FROM 'C:\\222\*.xml' where Text like '%FILENAME%' тут все отлично выбирает, но как теперь выбрать несколько разных полей, если на такие конструкции:
Скрытый текст
select filename.*, soft.* from
(SELECT Filename,Text FROM 'C:\\222\*.xml' where Text like '%FILENAME%') filename ,
(SELECT Filename,Text FROM 'C:\\222\*.xml' where Text like '%SOFT%') soft
where filename.Filename=soft.Filename(+)

выбивает ошибки, в то время как sql навигатор в коммандах подобного вида ничего "странного" не видит...
А еще нужно к названию файла привязаться, как-то SUBSTR по скобках ("<",">") сделать и вывести в csv.
Очень надеюсь, что мою тему увидит и прокомментирует, пользователь с ником "Iska", так как я понял - он с этим парсером на "ты". Пробовал ему в ЛС написать, но там ограничения, видимо от таких назойливых как я. А так как этот парсер с урезаным sql, то при попытке что-то выбрать, возникает ощущение "игры в сапера на повышеной сложности" .
Просмотрел 2-3 страницы по поиску "Logparser", но ответа или зацепки на свои запросы так и не нашел, на "stackoverflow" и в англоязычных примерах в большинстве встречаются запросы к win'довым журналам и запросы
html-страниц. =(.

Отправлено: 23:52, 22-08-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


gremlintv2, выложите образцы xml-файлов (а не приведённые огрызки), упаковав их в архив.

Цитата gremlintv2:
Пробовал выбирать ставя тип лога "XMLLOG" »
Откуда Вы это взяли — «XMLLOG»?
Скрытый текст
Цитата:
Input Formats

IIS Log File Input Formats
IISW3C: parses IIS log files in the W3C Extended Log File Format.
IIS: parses IIS log files in the Microsoft IIS Log File Format.
BIN: parses IIS log files in the Centralized Binary Log File Format.
IISODBC: returns database records from the tables logged to by IIS when configured to log in the ODBC Log Format.
HTTPERR: parses HTTP error log files generated by Http.sys.
URLSCAN: parses log files generated by the URLScan IIS filter.




Generic Text File Input Formats
CSV: parses comma-separated values text files.
TSV: parses tab-separated and space-separated values text files.
XML: parses XML text files.
W3C: parses text files in the W3C Extended Log File Format.
NCSA: parses web server log files in the NCSA Common, Combined, and Extended Log File Formats.
TEXTLINE: returns lines from generic text files.
TEXTWORD: returns words from generic text files.




System Information Input Formats
EVT: returns events from the Windows Event Log and from Event Log backup files (.evt files).
FS: returns information on files and directories.
REG: returns information on registry values.
ADS: returns information on Active Directory objects.




Special-purpose Input Formats
NETMON: parses network capture files created by NetMon.
ETW: parses Enterprise Tracing for Windows trace log files and live sessions.
COM: provides an interface to Custom Input Format COM Plugins.


Цитата gremlintv2:
так как я понял - он с этим парсером на "ты". »
Неа .

Цитата gremlintv2:
Пробовал ему в ЛС написать, но там ограничения, видимо от таких назойливых как я. »
Ограничение там одно — на количество сообщений, которое давно превышено, а Iska второй год никак не соберётся и не разгребёт эти авгиевы конюшни.

Отправлено: 07:35, 23-08-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо что ответили! Прикрепил файлы в топике темы - arxiv.7z. XMLLOG взял из гуя так как думал, что "он сделает все красиво", но увы =(..

Отправлено: 09:10, 23-08-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


gremlintv2, это не xml-файлы, к сожалению. В их начале идут некие бинарные «нашлёпки», как я понимаю, некие «как-бы цифровые подписи». Та же песня в конце файлов.

Что Вам нужно извлекать оттуда и в каком виде получать?

Отправлено: 10:01, 23-08-2016 | #4


Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


Извлекать нужно часть названия файла и теги, и получать в виде результата:
результат.txt

KOD___________R11GA_____R11GB_____R60GB
33408606______142167____ 28433_____0
38145836______22414_______________25

PS: поле KOD(оно ключевое) получаем из названия файлов через SUBSTR(Filename,7,8)
С выбором значений, точно затрудняюсь ответить, так как видимо, нужно будет "привлекать к участию" эталонный xml в котором будут все существующие xml-теги, либо каким-то образом вытягивать все уникальные теги и по ним сравнивать все файлы. Если бы удалось вытянуть все теги и сравнить с файлами, несмотря на содержимое тегов, было бы супер(так чтобы результат не основывался на четко указанных полях и парсились все теги).
Знать бы синтаксис и логику работы парсера(к сожалению нет у меня опыта работы с этим инструментом), остальное я постараюсь сам дописать.
PPS: как мне показалось, при задании параметра TEXTLINELOG парсер, воспринимает файлы как одну цельную строку.
Спасибо!

Последний раз редактировалось gremlintv2, 23-08-2016 в 10:38.


Отправлено: 10:26, 23-08-2016 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Может быть на PowerShell, подойдет:
Код: Выделить весь код
dir *.xml | Foreach {"KOD__________R11GA_____R11GB_____R60GB"} {
	$t = (gc $_.FullName) -match "R11GA|R11GB|R60GB" -replace '</.+|/.+' | % {"$($_.split(">")[1])"}
	"{0}{1}{2}{3}" -f $_.name.substring(6,8).PadRight(13,"_"),$t[0].PadRight(10,"_"),$t[1].PadRight(10,"_"),$t[2]
}
Вывод для данных xml:

Код: Выделить весь код
KOD__________R11GA_____R11GB_____R60GB
01784705_____982346____196469____0
33445606_____142167____28433_____0
38145836_________________________

Последний раз редактировалось Kazun, 23-08-2016 в 10:56.


Отправлено: 10:50, 23-08-2016 | #6


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата gremlintv2:
Извлекать нужно часть названия файла и теги, и получать в виде результата: »
Код: Выделить весь код
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT R11GA, R11GB, R60GB FROM 'C:\Мои проекты\0004\*.xml'" -i:XML -fMode:Tree -rootXPath:/DECLAR/DECLARBODY
Цитата gremlintv2:
PS: поле KOD(оно ключевое) получаем из названия файлов через SUBSTR(Filename,7,8) »
Фокус не удастся — во входном формате XML нет параметра, отвечающего за имя файла, увы.

Цитата gremlintv2:
С выбором значений, точно затрудняюсь ответить, так как видимо, нужно будет "привлекать к участию" эталонный xml в котором будут все существующие xml-теги, либо каким-то образом вытягивать все уникальные теги и по ним сравнивать все файлы. Если бы удалось вытянуть все теги и сравнить с файлами, несмотря на содержимое тегов, было бы супер(так чтобы результат не основывался на четко указанных полях и парсились все теги). »
Объясните, что Вам нужно.

Цитата gremlintv2:
PPS: как мне показалось, при задании параметра TEXTLINELOG парсер, воспринимает файлы как одну цельную строку. »
Нет, как отдельные строки (если Вы не ошиблись с указанием входной кодировки).

Цитата Kazun:
Может быть на PowerShell, подойдет: »
Именно так. Я токмо хотел посоветовать его пользовать. Но разбирать-таки надо будет именно как xml, а не текстом.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:00, 23-08-2016 | #7


Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


К сожалению по Вашему скрипту выбивает ошибку: "В текстовом комментарии обнаружен недопустимый знак." =(
Как я это вижу:
1)из папки с xml файлами выбираются все xml-теги и создается эталонный файл znach.txt с найденными тегами
2) по тегу<TIN>, а он есть во всех файлах, выбираются все значения найденных тегов и подставляются в файл znach.txt.

Последний раз редактировалось gremlintv2, 23-08-2016 в 11:16.


Отправлено: 11:09, 23-08-2016 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Разбор, как xml на PowerShell:

Код: Выделить весь код
dir *.xml | Foreach {"KOD__________R11GA_____R11GB_____R60GB"} {
	$text = (Get-Content $_.FullName -Raw) -replace 'xsi:nil="(true|false)"'
	$xml = [xml]$text.Substring($text.IndexOf('<?xml'), $text.IndexOf('</DECLAR>') - $text.IndexOf('<?xml') + 9)
	$t = $xml.DECLAR.DECLARBODY
	"{0}{1}{2}{3}" -f $_.name.substring(6,8).PadRight(13,"_"),$t.R11GA.PadRight(10,"_"),$t.R11GB.PadRight(10,"_"),$t.R60GB
}
Вывод:
Код: Выделить весь код
KOD__________R11GA_____R11GB_____R60GB
01784705_____982346____196469____0
33445606_____142167____28433_____0
38145836_________________________
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:19, 23-08-2016 | #9


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата gremlintv2:
К сожалению по Вашему скрипту выбивает ошибку: "В текстовом комментарии обнаружен недопустимый знак." =( »
Я предварительно очистил файлы от «бинарщины» и тем самым привёл их к корректному xml-виду.

Цитата gremlintv2:
Как я это вижу: »
gremlintv2, а я не вижу, поскольку Вы не отвечаете на заданный вопрос. Ей-богу, нет ни малейшего желания выцарапывать из Вас детали по кусочкам и за каждым разом всё переделывать заново.

Kazun, очень хорошо. Осталось таки выяснить у автора весь алгоритм.

Отправлено: 11:22, 23-08-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Logparser выбор и сравнение полей из xml файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Извлечение данных из набора xml файлов irgen Скриптовые языки администрирования Windows 2 29-10-2013 15:53
Любой язык - Сравнение списка файлов и каталога с файлами с копированием файлов из каталога jastreb83 Скриптовые языки администрирования Windows 0 10-04-2013 09:56
CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой. Aleks911tat Скриптовые языки администрирования Windows 12 25-08-2012 22:27
CMD/BAT - [решено] Выбор файлов из списка с последующим копированием и переносом в другую папку yaoleg2 Скриптовые языки администрирования Windows 10 04-11-2011 01:28
Сравнение и выбор ПО для сервака kub-lg Программное обеспечение Windows 9 10-05-2007 10:53




 
Переход