Mám program v C++, který ukládá výstup do souboru. Jedná se o několika tabulek a taky několik dalších dat. Jelikož má C++ v této oblasti velmi omezené možnosti, řešil jsem výstup jako Firebird embedded 2.5.2 databázový soubor. To proto, že program při zpracovávání dat pracuje právě s touto databází. Výhodu je komplexnost, etc... prostě má nesporné výhody. Má ale i nevýhody. Výstupní soubor, ač může být informačně třeba poměrně chudý (málo dat k uložení), má cca 900 kB. Další nevýhodou (co jsem četl) je, že fbclient (server) v programu - si vnitřně ukládá informace o každé vytvořené databázi - tím i výstupních souborech. Tím by časem mohl program (v závislosti na počtu vytvořených výstupních souborů) přerůst rozumné meze. Proto jsem se rozhodl výstupní soubor ukládat v jiném formátu a volba padla na TinyXML2. Vše potřebné uložit umím, horší je to s opětovným načtením z výstupního souboru do programu. Čísla a řetězce načíst umím, neumím tabulky. Mohl by mi prosím někdo poradit jak na to?
Fórum › XML / XSL(T)
TinyXML2 jak na extrahování tabulky
int data[2][2] = { {1,2}, {3,4} };
XMLDocument doc;
XMLElement *table, *row, *cell;
table = doc.NewElement("tabulka");
doc.InsertFirstChild(table);
for (int r = 0; r < 2; r++) {
row = doc.NewElement("radek");
table->InsertEndChild(row);
for (int c = 0; c < 2; c++) {
cell = doc.NewElement("bunka");
cell->SetText(data[r][c]);
row->InsertEndChild(cell);
}
}
doc.SaveFile("test.xml");
table = doc.FirstChildElement();
for (row = table->FirstChildElement(); row; row = row->NextSiblingElement()) {
for (cell = row->FirstChildElement(); cell; cell = cell->NextSiblingElement())
cout << cell->GetText() << " ";
cout << endl;
}
<tabulka>
<radek>
<bunka>1</bunka>
<bunka>2</bunka>
</radek>
<radek>
<bunka>3</bunka>
<bunka>4</bunka>
</radek>
</tabulka>
Mimochodem Firebird nedrží celou databázi v paměti a už vůbec ne jakési výstupní soubory. I kdyby ano, tak nevím, jak ti od toho pomůže import/export XML, (které stejně při velkém počtu záznamů bude větší), když nakonec pořád pracuješ s tou databází.
Jako přenositelný formát fajn, cokoliv jiného je nesmysl.
#3 gna
Někdy stačí pochopit strukturu dat a ejhle, v XML je z nepřehledné tabulky přehledný seznam. Názvy elementů "tabulka", "radek" a "bunka" je samozřejmě nutné zaměnit za sémantické značky.
Dík za odpovědi. Doteď mám výstupní soubor vytvořen jako novou databázi FB a to mi funguje skvěle. Jak jsem psal, těmi důvody byla velikost výst. souboru (víc jak 900 kB) a nárůst serveru (fakt jsem o tom kdysi na nějakém fóru četl ). Podle těch příspěvků na fóru byl zřejmý závěr, že počtem vytvořených databází velikost serveru značně narůstá. Já ale server opravdu nepitval a ruku do ohně za to taky dát nemůžu...
To vše mě lákalo nevytvářet výstupní soubor jako novou databázi, ale využít XML. Myslel jsem, že s tím objemem dat bych se mohl vejít do 100 kB. Faktem ale taky je, že tabulky které ukládám mají smíšený formát (int, double, stringy v jednom řádku). A tady je u TinyXML2 pro mě komplikace. Kdybych potřeboval ukládat jeden typ na jeden řádek, vystačím si s příkladem ze stránek TinyXML2 a použil bych pro uložení / načtení vector. Ale vše převádět na const char* by bylo značně frustrující. A tak mám dojem, že nebudu nic komplikovat a nechám to tak, jak to je. ještě jednou dík za názory.
#5 RoboHK
Hlavní motivací by měla být přenositelnost dat. Když někomu pošleš databázi FB, tak ji zpravidla nebude schopen otevřít. XML se však dá otevřít téměř čímkoli, moderní jazyky mívají podporu pro XML již zabudovanou. S C++ je to sice obtížnější, ale také to půjde.
To je pravda. Já mám ale výstupy z programu 2:
1) výstupní sestava - přímo z programu - jako stránka html (tu předávám dál, např. pro tisk nebo ke zpracování do ms excel, pdf...)
2) soubor samotný (fb databáze), který si můžu kdykoliv načíst, upravit data, doplnit atd. a expedovat dle prvního bodu.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak přenést změny ve struktuře vzorové tabulky na další tabulky — založil Marty
Jak vzít data z tabulky? — založil fix
Jak propojit DB tabulky ve Spring JPA — založil ingiraxo
Zjednodušení dotazu - jak bez dočasné tabulky? — založil hlucheucho
Jak resit editaci tabulky vice uzivateli php/js — založil peter
Moderátoři diskuze