Spanish List me esta volviendo loco.

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, veréis como ya pregunte en un par de post unas dudas, e echo una aplicación de un juego pero tengo un fallo que me trae de cabeza.

Mediante un LIST guardo el nivel en el que estas cuando sales de la aplicación para luego recuperar-lo al volver a entrar.

El problema es que cuando lo recupero lo recupero con corchetes es decir si recupero el nivel 5 recupero [5], cosa que e solventado con la función MID. pero cuando son 2 digitos tengo el siguiente problema:

Tengo dos variables primernum y segundonum.
Guardo cada numero en una variable, al cargar compruebo mediante un msgbox y correctamente si el nivel es 12, guarda el 1 y el 2 pero al pasarlo al label , me aparece 1.2 y no se por que.

También solucionaría todo el problema si supiera por que me añade los [] o que no los añadiera.

Un saludo y disculpad por el tostón del post jejejeje
 

benji

Active Member
Licensed User
Longtime User
pero puedes obtener el largo del string, y si es 3, sabes que es un numero, y si es 4, es numero de 2 digitos, ajustas los parametros y recuperas el "12" en una sola variable
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola


También solucionaría todo el problema si supiera por que me añade los [] o que no los añadiera.
Si explicas como lo guardas seria mas facil contestar :D


Como no se como lo estas guardando, si lo haces asi, no tendras el problema de los corchetes

B4X:
Sub GraboFile()
    
    List1.Clear

    List1.Add(Nivel) ' o el metodo que emplees para meterlo en el list

    Try
      File.WriteList(Nombrecarpeta,NombredelFichero, List1)
    Catch
      Log("Error al escribir fichero NombredelFichero")
    End Try
  
  End Sub

Sub LeoFile()

  If File.Exists(Nombrecarpeta,NombredelFichero) Then
     List1 = File.ReadList(Nombrecarpeta,NombredelFichero)
     nivel = List1.Get(0)
   Else
      ' NO EXISTE PONGO POR DEFECTO
      nivel =0
   End If
End Sub

Si quieres grabar o leer mas datos solo tienes que emplear el mismo metodo, puedes mezclar puntuacion por nivel, nombre jugador, etc

Saludos
 

TheFalcon

Active Member
Licensed User
Longtime User
Gracias por contestar, yo guardo con un botón salir de este modo

lista1.Clear

lista1.add(lblnumpreguntas.text)
File.WriteList(CARPETA, NOMBRE_ARCHIVO, lista1)

Luego leo asi:



lista1 = File.ReadList(CARPETA, NOMBRE_ARCHIVO)
lblnumnivel.Text = lista1


primernum=MID(lblnumnivel.text,"2","1")'


--- Hasta aqui va perfecto, el problema es cuando son dos digitos y el segundo lo meto aqui:

segundonum=MID(lblnumnivel.text,"3","1")

Le hago el tipico if de si es = a "[" que no haga nada etc. cuando luego leo las dos variables me muestra bien los numeros pero al pasarlos a un label no.

No obstante voy a probar lo que me dices que pareces menos lioso xDD esto de haber programado en VB.net me mezcla conceptos jejejeje

ya os comentare. gracias
 

TheFalcon

Active Member
Licensed User
Longtime User
Acabo de probarlo y funciona perfectamente, no entiendo bien como con el tuyo no me genera los ... [] supongo que sera por el Get(0) , pero me has quitado un dolor de cabeza enorme que llevaba 4 días dándole vueltas por no molestar xD.

Muchísimas gracias
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Acabo de probarlo y funciona perfectamente, no entiendo bien como con el tuyo no me genera los ... [] supongo que sera por el Get(0)

Tu mismo te has contestado, yo leo el get(0), o el indice que sea como te comenté, el problema está en tu codigo aqui:

B4X:
lblnumnivel.Text = lista1

Estas asignando TODA la lista al label, asi que B4A lo que hace es poner todos los valores de la lista metidos entre corchetes, imaginate que tienes dos valores dentro de la lista (5 y 10) , al asignar toda la lista te devolveria esto:
[5, 10] , por eso veias los corchetes, por que asignabas la lista completa, y en el mio leo el valor de un indice y en este caso el 0, pero te lo devolverá sin corchetes si el indice es 1, 3 o 50.

Si tu codigo lo dejas igual pero cambias esto:

B4X:
lblnumnivel.Text = lista1.get(0) ' o el indice que quieras utilizar

Verás que tambien funciona sin necesidad de llamar a los sub que te escribí.

Haz una prueba para verlo, añade esto donde estaba el error:

B4X:
log("lista1 completa-" & lista1 & "-") ' los guiones son para saber exactamente lo que te devuelve

Perdona todo este "rollo", pero siempre he pensado que la mejor forma de ayudar es que se entienda el concepto, no darte la solución sin mas, y por eso te he explicado que hacias mal, para que sepas donde estaba el error y asi lo corriges sabiendolo.

Saludos
 

TheFalcon

Active Member
Licensed User
Longtime User
Gracias por la aclaración, si ami tampoco me gusta me lo den echo por eso lo reflexione, por que me rayaba que me diera los []. Muchas gracias nuevamente.

Me viene perfecot la solución primera por que es menos larga que la mía, aunque la mía como comentas con el .get(0) va de lujo, que guardo las 2 en mis apuntes :)


SOLUCIONADO!!!! que no se como editar el titulo
 
Last edited:
Top