Spanish [SOLUCIONADO] Problema con SubString2

DAOT

Member
Licensed User
Holas,

Tengo una variable que cada cierto tiempo va cambiando su contenido. Y un temporizador que cada 1 segundo lea la variable y muestre el contenido de una posición exacta con el SubString2 y me lo muestre en un label.

El problema que tengo es que cuando no detecta algún dato en la posición se cierra la aplicación.

Hay alguna forma de hacer que siga con la lectura, aunque no encuentre nada hasta que aparezca algún dato.


Gracias.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Holas,

Tengo una variable que cada cierto tiempo va cambiando su contenido. Y un temporizador que cada 1 segundo lea la variable y muestre el contenido de una posición exacta con el SubString2 y me lo muestre en un label.

El problema que tengo es que cuando no detecta algún dato en la posición se cierra la aplicación.

Hay alguna forma de hacer que siga con la lectura, aunque no encuentre nada hasta que aparezca algún dato.


Gracias.
Cuando no encuentre nada pasale un valor x, puede colocar un if y preguntar si trae algún dato si no le pasas el valor por defecto
 

cas6678

Active Member
Licensed User
Longtime User
Creo que el problema sera que no encuentra nada en las posiciones en las que tu le mandas buscar.

Primero verifica a traves de variable.lenght que la variable tenga el numero minimo de posiciones que tu pretendes leer con Substring2, si no las tiene puedes hacer varias cosas:

- No ejecutar Subtring2
- Cambiar el contenido de la variable para que tenga las posiciones necesarias
- Cambiar los parametros de Subtring2 para que se adapte al tamaño de tu variable

Si como dices quieres que siga si no hay nada que buscar, yo lo colocaria dentro de un IF

B4X:
If variable.lenght >= X then
     label.text=variable.subtring2(Y,X)
End if
 

DAOT

Member
Licensed User
Holas gracias por responder

he estado probando lo que me comentaron, pero sigo en lo mismo.

Parece que estoy mal enfocado ya que mi variable es de datos acumulados, por lo que note. ósea el largo va en aumento, pero cuando dejo de recibir datos. Y el SubString2 cae en una posición sin algún dato me cierra el programa, ya que este sigue tratando de leer en posiciones futuras.

Los datos los recibo por el puerto microusb cada 1 segundo. Pensé que si coloco un if con la opción que cuando detecte la entrada de datos por el puerto active el timer y cuando no detecte detenga el timer o algo así. Pero no sé cómo hacerlo o si es que se puede.
 

cas6678

Active Member
Licensed User
Longtime User
Has probado lo que te puse?

Substring2 te devuelve un string que va desde la primera posicion que le indicas hasta la ultima que tambien le indicas. Si la variable tiene menos posiciones que lo que tu le pides te dara error y se cerrara. Se trata de no pedirle lo que no te puede dar. Si antes de hacer el subtring2(Y,X) verificas que la variable tiene al menos X posciones no te pasara. Pruebalo.

Lo que tu dices si que se puede hacer, pero eso es otro tema y si el problema es el del Substring2 tiene solucion mas facil.

No es que quiera leer en posiciones futuras, es que le quieres hacer leer lo que no existe.
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Has probado a envolverlo todo en un Try-Catch???
Algo asi:
B4X:
Try
   label.text=variable.subtring2(Y,X)
Catch
   Log("No encontrado carácter")
End Try
Un saludo.
 

DAOT

Member
Licensed User
Holas.

-Cas6678 gracias por responder, tienes razón con el SubString2 mi código es infinito en posiciones es que los datos que me llegan igual son así, solo que si no me llega los datos el programa seguía su curso y me lo cierra.

-Descartex, no conocía la existencia del try catch, gracias me sirvió de maravillas no me cierra la aplicación y se puede reanudar una vez que vuelven a llegar los datos, un problema menos jaj

Saludos.
 
Top