MrV2K |
Explainer in simple terms.
|
|
|
Reged: 04/23/04
|
Posts: 65
|
Loc: SE, England
|
|
Send PM
|
|
Re: Command Line options...
10/04/12 07:44 PM
|
|
|
> > I wrote some code in purebasic to do this for a front end I'm writing. What it does > > is... > > > > 1. If theres no data it generate the xml file and compresses it down to 15mb to > save > > space. > > 2. Once theres a data file it loads the data. > > 3. Uncompresses the xml in memory > > 4. Recursively parses the xml nodes and attributes pulling out the data I need into > a > > 2D array. > > > > and all in less than 5 seconds. > > > > It took some head banging but I very pleased with the result. At the moment the > whole > > front end loads in less than 15 seconds including loading, parsing, sorting, > > filtering and checking the availability of 26000 plus entries. > > That is freaking amazing 5 sec... ouaou only in my dreams... > The best result i get is about 3 minutes.... > > Ok i make the 3 and the 4 ... > But how can you make the 1... this is impressive.. > But the generation of the mame.xml file took about 1.5 minutes... > > I really take a look about your code... i know "basic" and pascal is not to far...
Strangely it's a quirk with purebasic that it doesn't allow you to direct a programs output to a file with the >something.xml.
What I had to do is run the mame -listxml, my program then captures mames output and writes its own file with the xml output which seems to be a bit quicker than mame doing it itself.
I terms of speed I use Mame 64bit, my frontend is 64 bit and I have an i7 2600k running it. That's where the speed is coming from.
Here's a bit of code that parses the xml
; Ignore anything except normal nodes.
If XMLNodeType(*CurrentNode) = #PB_XML_Normal ; Add this node to the tree. Add name and attributes ; node$ = GetXMLNodeName(*CurrentNode) If ExamineXMLAttributes(*CurrentNode) While NextXMLAttribute(*CurrentNode) Attrib$ = XMLAttributeName(*CurrentNode) Attribval$ = XMLAttributeValue(*CurrentNode) If node$ = "mame" And Attrib$ ="build" And Game_Count = 0 : MAME_Version=Attribval$ : EndIf If node$ = "game" And Attrib$ = "name" : templist (Game_Count,0) = Attribval$ :Game_Count+1: EndIf If node$ = "game" And Attrib$ = "cloneof" : templist (Game_Count-1,6) = Attribval$:EndIf If node$ = "game" And Attrib$ = "sampleof" : templist (Game_Count-1,7) = Attribval$: EndIf If node$ = "game" And Attrib$ = "isbios" : templist (Game_Count-1,8) = Attribval$: EndIf If node$ = "game" And Attrib$ = "ismechanical" : templist (Game_Count-1,9) = Attribval$: EndIf If node$ = "driver" And Attrib$ = "status" : templist (Game_Count-1,5) = Attribval$ : EndIf If node$ = "display" And Attrib$ = "type" : templist (Game_Count-1,13) = Attribval$ : EndIf Wend nodeText$ + GetXMLNodeText(*CurrentNode) If node$ = "description" : templist (Game_Count-1,1) = nodeText$ : EndIf If node$ = "year" : templist (Game_Count-1,2) = nodeText$: EndIf If node$ = "manufacturer" : templist (Game_Count-1,3) = nodeText$ : EndIf If node$ = "biosset" : templist (Game_Count-1,4)="1" : EndIf EndIf ; Now get the first child node (if any) *ChildNode = ChildXMLNode(*CurrentNode) ; Loop through all available child nodes and call this procedure again ; While *ChildNode <> 0 FillTree(*ChildNode) *ChildNode = NextXMLNode(*ChildNode) Wend EndIf
MrV2K
"I See Dead People!"
easyEmu
|
|