Bug FreeXML avec gros fichier (28Mo)

Archive.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Bug FreeXML avec gros fichier (28Mo)

Message par Thyphoon »

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é !! :P
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()
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

J'ai toujours été rebuté par cette librairie. Flype, ou quelqu'un d'autre pourrait peut-être savoir. Mais moi, c'est rapé, je préfère te réinventer la roue: comme ça, je sais au moins quand est-ce qu'il faut regonfler les pneus!

Ollivier
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Ollivier a écrit :J'ai toujours été rebuté par cette librairie. Flype, ou quelqu'un d'autre pourrait peut-être savoir. Mais moi, c'est rapé, je préfère te réinventer la roue: comme ça, je sais au moins quand est-ce qu'il faut regonfler les pneus!

Ollivier
Je te rassure je suis pareille, j'adore réinventé la roue, au moins je maitrise :P
Mais j'ai juste modifier un code d'exemple qui avaité posté sur un forum...
En tout cas merci d'avoir repondu ! :)
Sur le forum anglais on me dit que ça ne bloque pas mais que effectivement la commande FreeXML() mais plus d'une minute a s'exécuter... faut que je teste pour voir ...
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Ollivier a écrit :J'ai toujours été rebuté par cette librairie. Flype, ou quelqu'un d'autre pourrait peut-être savoir. Mais moi, c'est rapé, je préfère te réinventer la roue: comme ça, je sais au moins quand est-ce qu'il faut regonfler les pneus!

Ollivier
Là c'est une roue de camion quand meme, si tu veux avoir un parsing correct d'un fichier XML lambda :P
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

:?

@Thyphoon

Je souhaite urgemment un lien vers ton fichier XML. S'il y a d'autres adeptes de la base de donnée qui ont quelques bourrins fichiers XML d'exemples, qu'ils se manifestent.

C'est pour une course de Caddies...

Ollivier
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Fred a écrit : Là c'est une roue de camion quand meme, si tu veux avoir un parsing correct d'un fichier XML lambda :P
ça c'est certain que contrairement aux autres codes que j'utilisais avant que le XML soit intégré dans purebasic, là il n'a jamais bronché quelque soit le fichier XML que je lui ai mis !
Mais dit moi Fred le problème que je rencontre avec FreeXML(), on peut faire quelques choses ou pas ?

@Ollivier : Des que je rentre chez moi ce soir je compresse mon fichier XML et je te l'envoie ! :P ou si tu n'as pas la patience télécharge Mame et fait la manipe que je donne dans le premier message
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

En passant, si tu pouvais me tester ce code : c'est le parking que le bourré d'architecte a construit sur le flanc de montagne. Génial pour tester les roues de Caddie.

Le but : mettre ton fichier sur cette jolie poudreuse pseudo-vierge.

Google : "XML overview"

Code : Tout sélectionner

EnableExplicit

Macro Display()
;   Message = ""
;   Message + ""
;   Message + Str(PageTileW) + " ; "
   

;   ClearScreen(0)
   ;UseBuffer(#DispMask)
      DisplaySprite(Page0, PosX, PosY)
      DisplaySprite(Page1, PosX - PageW, PosY)
      DisplaySprite(Page2, PosX, PosY - PageH)
      DisplaySprite(Page3, PosX - PageW, PosY - PageH)
   ;UseBuffer(-1)
;   DisplayTransparentSprite(#DispMask, DispX1, DispY1)
;   StartDrawing(ScreenOutput() )
;      DrawText(0, 0, Message)
;   StopDrawing()
   FlipBuffers()
EndMacro

Macro SpriteDrawing()
   
   For I = 0 To 3 
      CreateSprite(#Syst + I, 16, 16)
      StartDrawing(SpriteOutput(#Syst + I) )
         DrawText(0, 0, "P" + Str(I) )
      StopDrawing()
   Next I
   
   CreateSprite(#Deco, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco) )
      Box(0, 0, TileSize, TileSize, #White)
   StopDrawing()
   LoadFont(0, "verdana", 10)

   CreateSprite(#Deco + 1, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 1) )
      Box(0, 0, TileSize, TileSize, #Blue)
      DrawingFont(FontID(0) )
      DrawText(0, 2, "Pif", #Black, #Cyan)
   StopDrawing()

   CreateSprite(#Deco + 8, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 8) )
      Box(0, 0, TileSize, TileSize, #Blue)
      DrawingFont(FontID(0) )
      DrawText(0, 2, "Pif", #Black, #Cyan)
      Box(0, TileSize - 2, TileSize, 2, #Cyan)
   StopDrawing()

   CreateSprite(#Deco + 9, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 9) )
      Box(0, 0, TileSize, TileSize, #Blue)
      DrawingFont(FontID(0) )
      DrawText(0, 2, "Pif", #Black, #Cyan)
      Box(0, 0, TileSize, 2, #Cyan)
   StopDrawing()
   ; Ombre de droite en haut
   CreateSprite(#Deco + 2, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 2) )
      Box(0, 0, TileSize, TileSize, #White)
      For I = 0 To (TileSize / 2)
         C = I * 255 / TileSize * 2
         Box(1, I, (TileSize / 2) - I, (TileSize / 2) - I, RGB(255 - C, 255 - C, 255 - C) )
         Box(I, TileSize / 2, 1, TileSize / 2, RGB(C, C, C) )
      Next I
      Box(0, 0, 1, TileSize, #Blue)
   StopDrawing()
   ; Ombre du coin d'en bas à droite
   CreateSprite(#Deco + 3, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 3) )
      Box(0, 0, TileSize, TileSize, #White)
      For I = 0 To (TileSize / 2)
         C = I * 255 / TileSize * 2
         Box(0, 0, (TileSize / 2) - I + 1, (TileSize / 2) - I, RGB(255 - C, 255 - C, 255 - C) )
      Next I
   StopDrawing()
   ; Ombre d'en bas à gauche
   CreateSprite(#Deco + 4, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 4) )
      Box(0, 0, TileSize, TileSize, #White)
      For I = 0 To (TileSize / 2)
         C = I * 255 / TileSize * 2
         Box(I, 0, (TileSize / 2) - I, (TileSize / 2) - I, RGB(255 - C, 255 - C, 255 - C) )
         Box(TileSize / 2, I - 1, TileSize / 2, 1, RGB(C, C, C) )
      Next I
   StopDrawing()
   ; Ombre de droite
   CreateSprite(#Deco + 6, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 6) )
      Box(0, 0, TileSize, TileSize, #White)
      For I = 0 To (TileSize / 2)
         C = I * 255 / TileSize * 2
         Box(I, 0, 1, TileSize, RGB(C, C, C) )
      Next I
      Box(0, 0, 1, TileSize, #Black)
   StopDrawing()
   ; Ombre du bas
   CreateSprite(#Deco + 7, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 7) )
      Box(0, 0, TileSize, TileSize, #White)
      For I = 0 To (TileSize / 2)
         C = I * 255 / TileSize * 2
         Box(0, I - 1, TileSize, 1, RGB(C, C, C) )
      Next I
   StopDrawing()

   ; Bord gauche
   CreateSprite(#Deco + 5, TileSize, TileSize) 
   StartDrawing(SpriteOutput(#Deco + 5) )
      Box(0, 0, TileSize, TileSize, #White)
      Box(TileSize - 1, 0, 1, TileSize, #Black)
   StopDrawing()

   For I = 0 To 3
      CreateSprite(I, PageW, PageH)
   Next I
EndMacro

Macro SetTile(X, Y, N)
   If ((X) => 0) And (X) <= LevelTileMaxX
      If ((Y) => 0) And (Y) <= LevelTileMaxY
         Tile(X, Y) = N 
      EndIf
   EndIf
EndMacro

Macro Netiquette(X, Y)
   SetTile(X, Y, #Deco + 1)
   SetTile(X + 1, Y, #Deco + 2)
   SetTile(X + 1, Y + 1, #Deco + 3)
   SetTile(X, Y + 1, #Deco + 4)
   SetTile(X - 1, Y, #Deco + 5)
EndMacro

Macro Netiquette2(X, Y)
   SetTile(X, Y, #Deco + 8)
   SetTile(X + 1, Y, #Deco + 8)
   SetTile(X, Y + 1, #Deco + 9)
   SetTile(X + 1, Y + 1, #Deco + 9)
   
   SetTile(X + 2, Y, #Deco + 2)
   SetTile(X + 2, Y + 1, #Deco + 6)
   SetTile(X + 2, Y + 2, #Deco + 3)
   SetTile(X + 1, Y + 2, #Deco + 7)
   SetTile(X, Y + 2, #Deco + 4)
   SetTile(X - 1, Y, #Deco + 5)
   SetTile(X - 1, Y + 1, #Deco + 5)
EndMacro

Macro LevelLoading()
   For Y = 0 To LevelTileMaxY
      For X = 0 To LevelTileMaxX
         Tile(X, Y) = #Deco
      Next X
   Next Y   
   For Y = 0 To LevelTileMaxY Step 3
      For X = 0 To LevelTileMaxX Step 3
         If Random(9) = 0
            NEtiquette(X, Y)
         EndIf
      Next X
   Next Y   
EndMacro

Macro GetPageNo(X, Y) ; Calcul de la page concernée
   ((X / PageW) & 1) + (((Y / PageH) & 1) << 1)
EndMacro

Macro GetXValue(X) ; Calcul de X dans la page
   ((X % PageW) - (X % TileSize) )
EndMacro

Macro GetYValue(Y) ; Calcul de Y dans la page
   ((Y % PageH) - (Y % TileSize) )
EndMacro

Macro GetTile(XX, YY)
   Tile = -1
   TempX = XX / TileSize
   If (TempX => 0)
      If (TempX <= LevelTileMaxX)
         TempY = YY / TileSize
         If (TempY => 0)
            If (TempY <= LevelTileMaxY)
               Tile = Tile(TempX, TempY)
            EndIf
         EndIf
      EndIf
   EndIf
EndMacro

Macro UpdateTile(XX, YY)
   GetTile(XX, YY) ; Retourne le global Tile.I
   If Tile <> -1
      P = GetPageNo(XX, YY)
      UseBuffer(P)
         DisplaySprite(Tile, GetXValue(XX), GetYValue(YY) )
      UseBuffer(-1)
   EndIf
EndMacro

Macro UpdateTileLeftBorder()
   For Y = (LevelY - TileSize) To (LevelY + PageH + TileSize) ; Rajouté +TileSize
      UpdateTile((LevelX - TileSize), Y)
      Y + TileSize
      Y - 1
   Next Y
EndMacro

Macro UpdateTileRightBorder()
   For Y = (LevelY - TileSize) To (LevelY + PageH) ; Rajouté -TileSize
      UpdateTile((LevelX + PageW), Y)
      Y + TileSize
      Y - 1
   Next Y
EndMacro

Macro UpdateTileUpBorder()
   For X = (LevelX - TileSize) To (LevelX + PageW + TileSize) ; Rajouté +TileSize
      UpdateTile(X, (LevelY - TileSize) )
      X + TileSize
      X - 1
   Next X
EndMacro

Macro UpdateTileDownBorder()
   For X = (LevelX - TileSize) To (LevelX + PageW) ;Rajouté -TileSize
      UpdateTile(X, (LevelY + PageH) )
      X + TileSize
      X - 1
   Next X
EndMacro

Macro DrawVisibleTiles()
   For Y = LevelY To LevelY + PageH
      For X = LevelX To LevelX + PageW
         UpdateTile(X, Y)
         X + TileSize
         X - 1
      Next X
      Y + TileSize
      Y - 1
   Next Y
EndMacro

Macro MoveLeft()
   If LevelX > 0           
      If LevelX - VitX < 0 ; "Sort" du niveau?
         VitX = LevelX
      EndIf               
      PosX + VitX
      If PosX => PageW 
         ShiftX + PageW
         PosX - PageW
         Page0 ! 1
         Page1 ! 1
         Page2 ! 1
         Page3 ! 1
      EndIf
      LevelX = 0 - (ShiftX + PosX)
      OldLevelTileX = LevelTileX
      LevelTileX = LevelX / TileSize
      If LevelTileX <> OldLevelTileX
         UpdateTileLeftBorder()
      EndIf
      DisplayFlag = 1
   EndIf
EndMacro

Macro MoveRight()
            If LevelX < (LevelW - DispW)

               If LevelX + VitX > (LevelW - DispW) ; "Sort" du niveau?
                  VitX = (LevelW - DispW) - LevelX
               EndIf

               PosX - VitX
               If PosX < 0
                  ShiftX - PageW
                  PosX + PageW
                  Page0 ! 1
                  Page1 ! 1
                  Page2 ! 1
                  Page3 ! 1
               EndIf
               LevelX = 0 - (ShiftX + PosX)
               OldLevelTileX = LevelTileX
               LevelTileX = LevelX / TileSize
               If LevelTileX <> OldLevelTileX
                  UpdateTileRightBorder()
               EndIf
               DisplayFlag = 1
            EndIf
EndMacro

Macro MoveUp()
   If LevelY > 0
      If LevelY - VitY < 0 ; "Sort" du niveau?
         VitY = LevelY
      EndIf
      PosY + VitY
      If PosY => PageH
         ShiftY + PageH
         PosY - PageH
         Page0 ! 2
         Page1 ! 2
         Page2 ! 2
         Page3 ! 2
      EndIf
      LevelY = 0 - (ShiftY + PosY)
      OldLevelTileY = LevelTileY
      LevelTileY = LevelY / TileSize
      If LevelTileY <> OldLevelTileY
         UpdateTileUpBorder()
      EndIf
      DisplayFlag = 1
   EndIf
EndMacro

Macro MoveDown()
   If LevelY < (LevelH - DispH)
      If LevelY + VitY > (LevelH - DispH) ; "Sort" du niveau?
         VitY = (LevelH - DispH) - LevelY
      EndIf
      PosY - VitY
      If PosY < 0
         ShiftY - PageH
         PosY + PageH
         Page0 ! 2
         Page1 ! 2
         Page2 ! 2
         Page3 ! 2
      EndIf
      LevelY = 0 - (ShiftY + PosY)
      OldLevelTileY = LevelTileY
      LevelTileY = LevelY / TileSize
      If LevelTileY <> OldLevelTileY
         UpdateTileDownBorder()
      EndIf
      DisplayFlag = 1
   EndIf
EndMacro

#Syst = 4096
#DispMask = 16
#Deco = 256

;-______________
;- Globals...   
;-¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Global TileSize.I ; Taille d'un Tile en pixels

Global ScrW.I ; Largeur de l'écran en pixels
Global ScrH.I ; Hauteur de l'écran en pixels
Global ScrD.I ; Profondeur de l'écran en bits par pixels

Global DispX1.I ; Coordonnée de la zone d'affichage
Global DispY1.I ; en pixels
Global DispX2.I ;
Global DispY2.I ;

Global DispW.I  ; Dimensions de l'écran d'affichage
Global DispH.I  ; en pixels

Global PageW.I ; Dimensions d'une page en pixels
Global PageH.I ;

Global PageTileW.I ; Dimensions d'une page en Tiles 
Global PageTileH.I ;

Global C.I ; coefficient de couleur
Global I.I
Global P.I
Global X.I
Global Y.I
Global Tile.I
Global TempX.I
Global TempY.I

Global Message.S

Global Page0.I = 0
Global Page1.I = 1
Global Page2.I = 2
Global Page3.I = 3
;-Vitesse
Global Vit.I = 8

Global PosX.I ; Décalage dans une page
Global PosY.I ; en pixels

Global ShiftX.I ; Décalage page par page
Global ShiftY.I ; en pixels

Global LevelX.I ; Décalage total (page + position)
Global LevelY.I ; en pixels

Global LevelTileX.I ; Décalage total (page + position)
Global LevelTileY.I ; en Tiles

Global OldLevelTileX.I ; Dans la détection des mises à jour
Global OldLevelTileY.I ; Ancien décalage total en Tiles

Global LevelTileW.I ; Dimensions du niveau en Tiles 
Global LevelTileH.I ;

Global LevelTileMaxX.I ; Limites du niveau en Tiles
Global LevelTileMaxY.I ;

Global LevelW.I ; Dimensions du niveau en pixels
Global LevelH.I ;

Global DisplayFlag.I

Global VitX.I
Global VitY.I

Global VitesseX.I
Global VitesseY.I

Global QuitGame.I

TileSize = 20

LevelTileW = 1024
LevelTileH = 1024

LevelW = LevelTileW * TileSize
LevelH = LevelTileH * TileSize

LevelTileMaxX = LevelTileW - 1
LevelTileMaxY = LevelTileH - 1

Global Dim Tile.I(LevelTileMaxX, LevelTileMaxY)
Delay(99)

   InitSprite()
   InitKeyboard()

   ExamineDesktops()
   ScrW = DesktopWidth(0)
   ScrH = DesktopHeight(0)
   ScrD = DesktopDepth(0)
   
   DispX1 = 0
   DispY1 = 0
   DispX2 = ScrW - 1
   DispY2 = ScrH - 1
   DispW = (DispX2 - DispX1) + 1
   DispH = (DispY2 - DispY1) + 1
   
   PageW = DispW
   PageH = DispH
   PageW - (PageW % TileSize)
   If PageW < DispW: PageW + TileSize: EndIf
   PageH - (PageH % TileSize)
   If PageH < DispH: PageH + TileSize: EndIf

   PageTileW = PageW / TileSize
   PageTileH = PageH / TileSize
   
   OpenScreen(ScrW, ScrH, ScrD, "")
   ;OpenWindow(0, 0, 0, ScrW, ScrH, "", $80000000)
   ;OpenWindowedScreen(WindowID(0), 0, 0, ScrW, ScrH, 0, 0, 0)
   
   SpriteDrawing()
   LevelLoading()

   DrawVisibleTiles()
   Display()
;-______________
;- Repeat...   
;-¯¯¯¯¯¯¯¯¯¯¯¯¯¯

   Define DividerX.I
   Define DividerY.I
   Repeat
      ;Delay(99)
      Delay(1)
      DisplayFlag = 0
      
      VitX = Vit
      VitY = Vit
      If ExamineKeyboard()
         If KeyboardPushed(#PB_Key_Left)
            If (VitesseX - 1) > (0 - TileSize) 
               VitesseX - 1
            EndIf
         EndIf
         If KeyboardPushed(#PB_Key_Right)
            If (VitesseX + 1) < TileSize
               VitesseX + 1
            EndIf
         EndIf
         If KeyboardPushed(#PB_Key_Up)
            If (VitesseY - 1) > (0 - TileSize) 
               VitesseY - 1
            EndIf
         EndIf
         If KeyboardPushed(#PB_Key_Down)
            If (VitesseY + 1) < TileSize
               VitesseY + 1
            EndIf
         EndIf
         If KeyboardPushed(#PB_Key_Escape)
            QuitGame = 1
         EndIf
      EndIf
      If VitesseX < 0
         VitX = -VitesseX
         MoveLeft()
         DividerX ! 1: If DividerX & 1: VitesseX + 1: EndIf
      EndIf
      If VitesseX > 0
         VitX = VitesseX
         MoveRight()
         DividerX ! 1: If DividerX & 1: VitesseX - 1: EndIf
      EndIf
      If VitesseY < 0
         VitY = -VitesseY
         MoveUp()
         DividerY ! 1: If DividerY & 1: VitesseY + 1: EndIf
      EndIf
      If VitesseY > 0
         VitY = VitesseY
         MoveDown()
         DividerY ! 1: If DividerY & 1: VitesseY - 1: EndIf
      EndIf
      If DisplayFlag
         Display()
      EndIf
   Until QuitGame
   
   CloseScreen()
   End
   
   
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

voici 2 fichier XML un gros et un petit :
yann.lebrun.club.fr/fichierxml.zip
Mais j'ai pas bien compris ton code au dessus ! En tout cas c'est fluide :P
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut.

J'ai essayé.

Sur ton petit fichier, j'ai Fin1, 2 et 3 instantanément.

Pour le gros, j'ai Fin1 et après 1.30mn (j'ai fait 2essais) j'ai Fin2 et 3.

J'ai testé avec la 4.20, j'ai Fin1 qui s'affiche et 3 secondes plus tard c'est nickel, j'ai Fin2 et 3 qui s'affichent aussi.

Y'a dl'a rectif de bug en perspective.
Allez Fred, au boulot :wink:

Bye.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Geo Trouvpatou a écrit :Salut.

J'ai essayé.

Sur ton petit fichier, j'ai Fin1, 2 et 3 instantanément.

Pour le gros, j'ai Fin1 et après 1.30mn (j'ai fait 2essais) j'ai Fin2 et 3.

J'ai testé avec la 4.20, j'ai Fin1 qui s'affiche et 3 secondes plus tard c'est nickel, j'ai Fin2 et 3 qui s'affichent aussi.

Y'a dl'a rectif de bug en perspective.
Allez Fred, au boulot :wink:

Bye.
Merci beaucoup !! :P
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut Thyphoon

La 4.31 est sortie l'as-tu installée et si oui ce bug lié uniquement à la 4.30 est-il résolu ?

Bye.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

non je n'ai pas encore testé ! Des que j'ai un peu de temps je regarde ... mais vu que sur le forum il n'a pas été marqué "Fixed" , il y a peu de chance... Je te tient au courant
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Salut Thyphoon,

Je te prie de m'excuser pour le retard. Comme le disait Fred, c'est une roue de camion le parsing XML! Depuis le temps, j'en suis à 23% de la traduction de la recommandation XML (c'est un enfer!). Mais je ne lacherai pas, j'aime bien ce truc! Et puis je suis sûr que ça une utilité certaine même s'il existe déjà une bibliothèque, notamment en matière de suggestions à venir.

Pour ce qui est du problème actuel avec FreeXML(), sa résolution n'est pas encore effective mais est prise en compte pour les futures mises à jour.

Et GeoTrouvePaTou, il ment! Car il trouve quand même!!

Ollivier
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

@ Ollivier : j'ai trouvé, c'est surtout que je m'étais déjà fait avoir avec la biblio Packer qui ne fonctionnait pas sur une ancienne version et qui fonctionne très bien avec cette 4.30.

Au début, quand j'entendais des gens dire qu'ils étaient encore avec une vieille version de PB, je me demandais pourquoi ils n'ugradaient pas vers la toute dernière version.

Ben maintenant, je comprends mieux, parce que récemment, je double-clic sur un .pb, cela me l'ouvre dans l'éditeur, je compile et là....Misère erreur machin chose à cause d'une liste chaînée que je faisais passer dans une procédure.
Je cherche, je cherche et cherche encore, pour m'apercevoir que le fichier s'était ouvert dans l'ide avec le compilo 4.20.
Bref un code super fonctionnel en 4.3 ne fonctionnait pas en 4.2, donc maintenant, tant que mon petit prog fonctionne bien sous cette 4.3 alors je ne préfère pas passer en 4.31 ;)

@ Thyphoon : ok

Bye.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Je confirme le problème de Typhoon sur la v4.31 avec un très gros fichier XML.
J'ai testé avec le fichier Mame.xml comme conseillé (34 Mo).

Le code incriminé peut même être simplifié à l'extrême comme suit :

Code : Tout sélectionner

Debug "--LOAD--"

If LoadXML(0, "Mame.xml")
  
  Debug "--FREE--"
  
  FreeXML(0) ; <-- Retourne au bout de plus d'une minute !
  
EndIf

Debug "--FIN--"

La library XML de PB étant basé sur EXPAT, je vais tester voir ce que çà donne en programmant directement LIBEXPAT.DLL, on verra bien...
Image
Répondre