Bug FreeXML avec gros fichier (28Mo)
Publié : lun. 04/mai/2009 8:17
Bonjour,
quelqu'un utilise t'il la commande FreeXML avec de tres gros fichier XML ?
avec les petits pas de problème, mais avec les gros (28Mo) ça fige .... le programme n'avance plus ...
Je ne sais pas trop comment vous faire une demo ... un fichier de 28Mo c'est pas facile a envoyé !!
pour avoir le fichier XML de 28 Mo il faut télécharger l'émulateur Mame
ensuite en ligne de commande >Mame.exe -listxml >Mame.xml
et tester avec ce code... il bloque sur FreeXml()
Maintenant ouvrez le fichier Mame.Xml... diminuer réduisez le façon qu'il soit plus petit qu'1Mo et retester avec le code.. et là ça marche
quelqu'un utilise t'il la commande FreeXML avec de tres gros fichier XML ?
avec les petits pas de problème, mais avec les gros (28Mo) ça fige .... le programme n'avance plus ...
Je ne sais pas trop comment vous faire une demo ... un fichier de 28Mo c'est pas facile a envoyé !!

pour avoir le fichier XML de 28 Mo il faut télécharger l'émulateur Mame
ensuite en ligne de commande >Mame.exe -listxml >Mame.xml
et tester avec ce code... il bloque sur FreeXml()
Maintenant ouvrez le fichier Mame.Xml... diminuer réduisez le façon qu'il soit plus petit qu'1Mo et retester avec le code.. et là ça marche
Code : Tout sélectionner
Procedure Test()
file$="Mame.xml"
tree = LoadXML(#PB_Any, file$)
If IsXML(tree) And XMLStatus(tree)=0
*node = MainXMLNode(tree)
While *node
For child = 1 To XMLChildCount(*node)
*child = ChildXMLNode(*node, child)
;ShowNode("Child "+Str(child), *child)
If *child
If GetXMLNodeName(*child)="game"
;On réinitialise les variables
name.s=""
cloneof.s=""
isbios.s=""
romof.s=""
runnable.s=""
description.s=""
year.s=""
manufacturer.s=""
input.s=""
ExamineXMLAttributes(*child)
While NextXMLAttribute(*child)
Select XMLAttributeName(*child)
Case "name" ;nom de la rom
name=XMLAttributeValue(*child)
Case "cloneof"; donne le nom si il s'agit d'un clone
cloneof=XMLAttributeValue(*child)
Case "romof";nom de la rom
romof=XMLAttributeValue(*child)
Case "isbios" ; si il s'agit d'un bios yes/no
isbios=XMLAttributeValue(*child)
Case "runnable"; si on peut le lancer
runnable=XMLAttributeValue(*child)
EndSelect
Wend
For sndchild = 1 To XMLChildCount(*child)
*sndchild = ChildXMLNode(*child, sndchild)
If *sndchild
Select GetXMLNodeName(*sndchild)
Case "description" ;Nom du jeu
description=GetXMLNodeText(*sndchild)
Case "year" ;Année
year=GetXMLNodeText(*sndchild)
Case "manufacturer" ;Editeur
manufacturer=GetXMLNodeText(*sndchild)
Case "input" ;Nombre de joueur
EndSelect
EndIf
Next
;Si les conditions sont rempli on rajoute un jeu
If cloneof="" And (isbios="" Or isbios="no") And runnable="yes"
Debug name
EndIf
EndIf
EndIf
; For grandchild = 1 To XMLChildCount(*child)
; *grandchild = ChildXMLNode(*child, grandchild)
; ShowNode("Grandchild "+Str(grandchild), *grandchild)
; Next grandchild
Next child
*node = NextXMLNode(*node)
Wend
Debug "Fin1"
FreeXML(tree)
Debug "Fin2"
EndIf
Debug "Fin3"
EndProcedure
Test()