[Ответить в тред] Ответить в тред

16/08/16 - Запущен Двач Трекер
01/08/16 - Вернули возможность создавать юзердоски
09/07/16 - Новое API для капчи - внимание разработчикам приложений



Новые доски: /obr/ - Offline Battle Rap • /hv/ - Халява в интернете • /2d/ - Аниме/Беседка • /wwe/ - WorldWide Wrestling Universe • /ch/ - Чатики и конфочки • Создай свою

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 17 | 1 | 7
Назад Вниз Каталог Обновить

NAWK solaris Аноним 04/08/16 Чтв 14:45:00  812937  
14703111004920.jpg (105Кб, 800x600)
ньюфаг осваивает программирование.
И по случаю на работе стоит Solaris
И ,о мучения, нужно распарсить XML используя только Solaris.
В чем малина? Есть xml такого вида
<xn:MeContext id="CV0001">
<xn:VsDataContainer id="CV0001_021">
</xn:attributes>
<xn:VsDataContainer id="10563">
</xn:VsDataContainer>
<xn:VsDataContainer id="10587">
</xn:VsDataContainer>
<xn:VsDataContainer id="10612">
</xn:VsDataContainer>
</xn:VsDataContainer>
</xn:MeContext>
Как можно отличить два xn:VsDataContainer друг от друга ?

Вот пример команды
nawk -F'<' '/<xn:MeContext/{split($0,a_Context,"\"");v_Context=a_Context[2]}
/<xn:VsDataContainer/{split($0,a_data,"\"");v_data=a_data[2]}\
/<xn:VsDataContainer/{split($0,a_data2,"\"");v_data2=a_data2[2]}\
{print v_Context v_data v_data2}' myfile.xml

В sed можно сделать отступ строки, а как быть тут ?
Аноним 04/08/16 Чтв 14:48:04  812943
>>812937 (OP)
вот так нагляднее ?

<xn:VsDataContainer id="CV0001_021">
</xn:attributes>
<xn:VsDataContainer id="10563">
</xn:VsDataContainer>
<xn:VsDataContainer id="10587">
</xn:VsDataContainer>
<xn:VsDataContainer id="10612">
</xn:VsDataContainer>
</xn:VsDataContainer>
Аноним 04/08/16 Чтв 14:48:36  812944
>>812937 (OP)
Что значит "распарсить"? Получить parse tree? С awk у тебя это не получиться. Вытащить что-то конкретное? Тогда пиши, что именно.
Аноним 04/08/16 Чтв 14:49:11  812945
>>812943
сука почему съедает пробелы в начале...
Аноним 04/08/16 Чтв 14:54:17  812952
>>812944
скорее всего вытащить что-то конкретное. а именно строки содержащие xn:MeContext, xn:VsDataContainer и будь это нечто иное, то все полилось бы, но третья строка/переменная тоже содержит xn:VsDataContainer

Как их отличить ? В начале каждой строки разное количество пробелов. для Второй это скажем 28, для 3-ей 32.
Аноним 04/08/16 Чтв 14:55:52  812953
>>812952
> скорее всего вытащить что-то конкретное. а именно строки содержащие xn:MeContext, xn:VsDataContainer
Используй grep
Аноним 04/08/16 Чтв 14:57:28  812955
>>812952
на выходе должно получиться
CV0001 CV0001_021 10563
Аноним 05/08/16 Птн 07:16:15  813557
>>812953
через GREP будет долго обрабатываться + нужно делать цикл. Это не удобно.
xml то состоит из кучи таких вот данных. будь это несколько строчек, я бы не спрашивал как выдернуть данные.
Аноним 05/08/16 Птн 21:16:59  814081
>>813557
Кекнул с тебя, маня. Греч у него медленный. Ну пиздец
Аноним 10/08/16 Срд 12:09:59  817100
>>814081
ЛОЛ. школник. если xml весит овер 100 метров, то парсить ты будешь, используя греп, через условие If,then.
Аноним 10/08/16 Срд 12:19:41  817106
> xn:MeContext
Это не из Эрикссона случайно xml?
Аноним 10/08/16 Срд 13:03:21  817128
>>817106
именно )
Аноним 10/08/16 Срд 13:12:26  817132
>>817128
Вроде бы xml там в таком формате, что парсить можно хоть микроволновкой, должно быть где-то описано сколько пробелов, какая последовательность, атрибуты всегда будут в конце и т.д и т.п. Т.е. парсить тем, чем ты собираешься должно быть норм. Но наверно никто в эрике уже так не делает, макаками были наделаны стопицот программ, как вычленять данные. Лучше спроси коллег, нет ли уже чего готового, 100% ты делаешь то, что уже кто-то сделал.
Аноним 11/08/16 Чтв 10:31:43  817661
>>817132
В общем коллеги без понятия.
Нашел/подсказали в аналах Solaris gawk.
(nawk просто днище. ни какого описания)
Проблема решена через регулярные выражения.
затык был именно в пробелах. полставляется в шаблон /^ {28}<xn:VsDataContainer/ и все прекрасно парсится.
Аноним 11/08/16 Чтв 10:34:43  817665
>>812937 (OP)
Для парсинга XML есть утилиты вроде xmlstarlet, понимающие XML, Xpath итд. А ты занимаешься наркоманством.
Аноним 11/08/16 Чтв 11:24:22  817700
>>817665
будь это мой линукс и будь я админов... поставил бы разные утилиты. НО эта рабочий Linux Solaris. Все за деньги.
Аноним 11/08/16 Чтв 19:38:11  818009
>>812937 (OP)
Берешь и пишешь парсер, в чем проблема?
Аноним 11/08/16 Чтв 20:32:13  818049
В солярке стопудово есть перл, берешь из спана наиболее подходящую библиотеку и парсишь аки боженька.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 17 | 1 | 7
Назад Вверх Каталог Обновить

Топ тредов
Избранное