Afro Опубликовано 20 октября, 2012 Поделиться Опубликовано 20 октября, 2012 Доброго времени суток.Имеется файл следующего содержания:<clientzones><subzones> <subzone> <name>STR_AbProD2_SZ_B</name> <priority>16</priority> <string>STR_AbProD2_SZ_B</string> <breath_area>FALSE</breath_area> <power_area>FALSE</power_area> <ui_map>main</ui_map> <fatigue_korea>FALSE</fatigue_korea> <points_info> <type>polygon</type> <points> <npc_info> <movetype>false</movetype> <nameid>798356</nameid> <pos> <x>417.244720</x> <y>357.266296</y> <z>231.750000</z> </pos> </npc_info> <npc_info> <movetype>false</movetype> <nameid>798356</nameid> <pos> <x> 377.244720</x> <y> 312.016296</y> <z>221.000000</z> </pos> </npc_info> </points> <bottom>0.100000</bottom> <top>500.100000</top> </points_info> </subzone></subzones></clientzones>Нужно из этого файла вытащить id, x/y/z координаты и записать следующим образом в новый файл<spawns><spawn map="NEW-IDABPROD3" npcid="798356" pool="2" interval="105"> <object x="417.244720" y="357.266296" z="231.750000" h="0" /> <object x="377.244720" y="312.016296" z="221.000000" h="0" /> </spawn></spawns>*параметр pool - количество координат, а h, interval и map - статичныНе откажусь от примера кода или ссылок на литературу, в которой можно про это почитать Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 20 октября, 2012 Поделиться Опубликовано 20 октября, 2012 Советую погуглить XML парсер C++. Ссылка на комментарий Поделиться на другие сайты Поделиться
Afro Опубликовано 20 октября, 2012 Автор Поделиться Опубликовано 20 октября, 2012 Всё это конечно просто замечательно, но хотелось бы кого-то примерчика, как я понял существует куча библиотек облегчающих эту задачу, но т.к. я ещё мягко говоря нубец, для меня сложно выбрать какую-то и написатьможно пример, пусть даже не для предложенного примера, а полегче, чтобы понять логику выполнения? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 20 октября, 2012 Поделиться Опубликовано 20 октября, 2012 Всё это конечно просто замечательно, но хотелось бы кого-то примерчика, как я понял существует куча библиотек облегчающих эту задачу, но т.к. я ещё мягко говоря нубец, для меня сложно выбрать какую-то и написатьможно пример, пусть даже не для предложенного примера, а полегче, чтобы понять логику выполнения?Не существует библиотек облегчающих эту задачу (хотя на C# это проще простого). Ссылка на комментарий Поделиться на другие сайты Поделиться
Afro Опубликовано 20 октября, 2012 Автор Поделиться Опубликовано 20 октября, 2012 хм, видно я ошибся.На сишарпе - да, даже есть пример хороший, но я хочу на плюсах.Но не приложу ума как Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 21 октября, 2012 Поделиться Опубликовано 21 октября, 2012 хм, видно я ошибся.На сишарпе - да, даже есть пример хороший, но я хочу на плюсах.Но не приложу ума какДумаю тебе придётся воспользоваться регулярными выражениями. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 октября, 2012 Поделиться Опубликовано 21 октября, 2012 Проект codeproject содержит огромное количество статей с примерами разных задач. По ссылке пример XML разметки и извлечения данных из документа xml на C++. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 21 октября, 2012 Поделиться Опубликовано 21 октября, 2012 Проект codeproject содержит огромное количество статей с примерами разных задач. По ссылке пример XML разметки и извлечения данных из документа xml на C++.Копия того, что я видел на C#.P.S. я думал что он хочет сам свой парсер написать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Afro Опубликовано 21 октября, 2012 Автор Поделиться Опубликовано 21 октября, 2012 Копия того, что я видел на C#.P.S. я думал что он хочет сам свой парсер написать.Именно так, свой) Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 21 октября, 2012 Поделиться Опубликовано 21 октября, 2012 Именно так, свой)Тогда тебе просто необходимо почитать про регулярные выражения на C++ Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 октября, 2012 Поделиться Опубликовано 21 октября, 2012 Автор ищи в поисковике "с++ xml tiny parser". Я думаю найдешь множество простых примеров. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость aassdd Опубликовано 23 ноября, 2012 Поделиться Опубликовано 23 ноября, 2012 Так и быть помогу)))Вообщем :#include <Windows.h>#include <iostream>#include <fstream>#include <string>using namespace std;int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){string path = ("test.xml");ifstream f(path);string s;string out ("go.xml" );ofstream f2(out);while(!f.eof()){ f >> s;if(s.find("<nameid>")<s.size()){f2 << s << endl; f >> s;}if(s.find("<x>")<s.size()){ f2 << s << endl;f >> s;}if(s.find("<y>")<s.size()){f2 << s << endl;f >> s;}if(s.find("<z>")<s.size()){f2 << s << endl;f >> s;}}f.close();f2.close();}test.xml - inputgo.xml - outputВывод:<nameid>798356</nameid><x>417.244720</x><y>357.266296</y><z>231.750000</z>А вот ещё на калякал :#include <Windows.h>#include <iostream>#include <fstream>#include <string>using namespace std;int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){string infa[100];int i = 0;string line;string path = ("test.xml");string out = ("go.xml");ofstream v(out);ifstream f(path.c_str());while(f.good()){getline(f,line);infa[i] = line;i++;}f.close();v << infa[15] << "\n" << infa[17] << "\n" << infa[18] << "\n" << infa[19];v.close();}Вывод как и вверху.Но тут уже зависит от линии, какая она стоит по счету)))Конечно за тебя все не буду делать)) но думаю достаточно что бы понять.И опять же не какие парсеры не нужны : Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения