https://foro.gambas-es.org/viewtopic.php?f=1&t=2725&p=15483#p15483
-----------------------------------
jsbsan
Sabado, 24 Noviembre 2012, 17:41

Lectura De Archivos .TMX
-----------------------------------
Estoy intentando abrir un fichero del tipo .TMX (los crea el editor de mapas Tiled ([url=http://razonartificial.com/2010/12/tiled-map-editor-el-editor-de-mapas-libre/]http://razonartificial.com/2010/12/tiled-map-editor-el-editor-de-mapas-libre/).

Este tiene unas lineas que estan codificadas en base64 y comprimidas en gz.

En gambas3, desde la version 3.2, tenemos herramientas para poder decodificar en base 64, ademas de tener el componente gb.compress, para la descomprimir qzip

En principio se podria hacer, os dejo aqui mi código:

[code linenumbers=false syntax=gambas]Public Sub Form_Open()
  
  Dim mensajeoriginal As String
  Dim mensajedecodificado As String
  Dim mensajedescomprimido As String
  Dim descomprimirGZ As New Uncompress
  
  Print "*****************Traduccion de .tmx linea decodificada base64 y comprimida ******************"
  
  mensajeoriginal = "eJzt0rENgDAMRcFkE5ZIy7BMSgoKC6VEsoErrn/yd2+tdYCfOgo0wBtsBRqA54xpv4wguyv2rWR3rfriDbO7ovu2Ffuq/h8AAN9xAj4aDOc="

'descomprimo

  mensajedecodificado = UnBase64$(mensajeoriginal)
  descomprimirGZ.type = "zlib"
  mensajedescomprimido = descomprimirGZ.String(mensajedecodificado)
 

'convertir....  
'duda de como hacerlo.....

End[/code]

Nota: Como lo que estoy interesado en en "traducir" la linea comprimida, la he copiado en el código de un fichero creado por Tiled Map Editor.

Lo que no se es como traducir la parte de  "convertir" ... 

Este es el código que quiero traducir de python:

[code linenumbers=false syntax=python]
# Mapas
# ---------------------------------------------------------------------
 
def decodificar(cadena):
    # Decodificar.
    cadena = base64.decodestring(cadena)
     
    # Descomprimir.
    copmressed_stream = StringIO.StringIO(cadena)
    gzipper = gzip.GzipFile(fileobj=copmressed_stream)
    cadena = gzipper.read()
     
    # Convertir.
    salida = []
    for idx in xrange(0, len(cadena), 4):
        val = ord(str(cadena[idx])) | (ord(str(cadena[idx + 1])) << 8) | \
        (ord(str(cadena[idx + 2])) << 16) | (ord(str(cadena[idx + 3])) << 24)
        salida.append(val)
         
    return salida
[/code]

Codigo original de python en: [url=http://razonartificial.com/2010/06/engine-ix-cargando-el-tileset/]http://razonartificial.com/2010/06/engine-ix-cargando-el-tileset/

A ver si me podeis echar una mano...

Saludos


