Ayuda con Visual Basic 6

Hola, estoy haciendo mis pinitos con visual basic 6 que hacia años que no lo tocaba y estoy refrescando un poco la memoria.
Tengo un problema que a ver si alguien sabe solucionar.
Estoy haciendo un juego con 100 textbox de adivinar el personaje. Encima de cada textbox hay una imagen asi que hay que escribir en cada textbox el nombre de dicho personaje. En cada textbox tengo una condicion que si el nombre escrito ahi es el que correcto, el textbox se bloquee y ya no se pueda escribir mas y se guarde el dato en un archivo.
Los datos los guardo con:
Open "datos.txt" For Append As #1
Print #1, Text4.Text
Close #1

Los datos se almacenan correctamente en el archivo txt, el problema que tengo es que si cierro el formulario y lo vuelvo abrir quiero que cada dato que almacené se muestre en el textbox correspondiente y no se como hacerlo.
Por ejemplo los datos guardados en el txt no tiene porque ser seguidos, es decir, supongamos que la persona que este probando el juego solo sepa las respuestas de los textbox 1, 2, 4, 10, 25, 30 y 58 y cierre el juego para seguir jugando mas adelante. En el txt se guardan los datos de esos textbox en lineas seguidas y no se si se podrá de alguna manera leer los datos del txt y saber a que textbox corresponden cada uno para que al abrir el juego mas tarde, la primera linea del txt corresponda al textbox1, la segunda al 2, la tercera al 4, la quinta al 10, la sexta al 25, la septima al 30 y la octava linea al 58.
No se si me he explicado bien, alguien me puede ayudar?
Hola @cHukAs

No tengo ni idea de programar en Visual Basic 6 nunca he utilizado ese lenguaje. Creo que lo primero que deberías hacer es obtener el contenido del fichero donde has guardado los datos, a partir de ahi comprobar en que formato te viene (supongo que podrás pasarlo a una cadena de texto y obtenerlo asi) el problema es que no se si los saltos de lineas en string te lo detecta como \n o ni siquiera te los mete, a lo mejor lo mejor seria ponerle en el texto donde guardas un número estilo esto:

1- xxxxxxxxx
2- xxxxxxxxx
3-
4-
5- xxxxxxxxx

Así puedes diferenciar y recorrer de alguna manera con algún tipo de substring o algo, la verdad que no se como hacerlo en Visual porque no conozco la sintaxis ni los métodos que tiene pero creo que podría facilitarte el trabajo de esa manera tu que controlas mejor.

Mira a ver si te sirve para algo, sino buscamos otra solución.

Un saludo.
luismelo95 escribió:Hola @cHukAs

No tengo ni idea de programar en Visual Basic 6 nunca he utilizado ese lenguaje. Creo que lo primero que deberías hacer es obtener el contenido del fichero donde has guardado los datos, a partir de ahi comprobar en que formato te viene (supongo que podrás pasarlo a una cadena de texto y obtenerlo asi) el problema es que no se si los saltos de lineas en string te lo detecta como \n o ni siquiera te los mete, a lo mejor lo mejor seria ponerle en el texto donde guardas un número estilo esto:

1- xxxxxxxxx
2- xxxxxxxxx
3-
4-
5- xxxxxxxxx

Así puedes diferenciar y recorrer de alguna manera con algún tipo de substring o algo, la verdad que no se como hacerlo en Visual porque no conozco la sintaxis ni los métodos que tiene pero creo que podría facilitarte el trabajo de esa manera tu que controlas mejor.

Mira a ver si te sirve para algo, sino buscamos otra solución.

Un saludo.


Si, muchas gracias se me habia ocurrido guardar cada valor con un numero delante, es decir, el valor del text1 guardarlo como 1fulanito, el del textbox 80, pues 80pepe y luego recorrer el archivo de texto y detectar el primer numero y colocarlo en el textbox de ese numero, pero claro no se hacerlo, a ver si alguien me ilumina.
Gracias por la ayuda.
Existe una opción que en otros lenguajes se llama split(), que se aplica a las cadenas de texto, por ejemplo si logras almacenar el contenido del fichero en un string ("-1 Luis -2 Pablo -3 Jorge") a esta cadena podrías hacerle este método que no se como se llamará en Visual, seria algo como ObjetoTexto.split("-"); el parámetro es el caracter con el que lo separas que puede ser el que tu quieras, en este caso puse un "-" porque arriba en la lista hay un guión pero puedes pasarle el que quieras.

Todo esto te devolvería un array de string no se si lo conoces, un array almacena elementos en distintas posiciones, es decir, almacenaria en la posición 0 "-1 Luis" en la posición 2 "-2 Pablo" despues una ves lo tienes así solo te faltaría recorrerlo, comprobar los que no están vacíos y los que tienen contenido meterlos en su respectivo text, por ejemplo: para colocar en el primer text sería: ObjetoArray[0], para el segundo text: ObjetoArray[1] y así sucesivamente.

Seguimos comentandolo a ver en que mas te puedo ayudar.
luismelo95 escribió:Existe una opción que en otros lenguajes se llama split(), que se aplica a las cadenas de texto, por ejemplo si logras almacenar el contenido del fichero en un string ("-1 Luis -2 Pablo -3 Jorge") a esta cadena podrías hacerle este método que no se como se llamará en Visual, seria algo como ObjetoTexto.split("-"); el parámetro es el caracter con el que lo separas que puede ser el que tu quieras, en este caso puse un "-" porque arriba en la lista hay un guión pero puedes pasarle el que quieras.

Todo esto te devolvería un array de string no se si lo conoces, un array almacena elementos en distintas posiciones, es decir, almacenaria en la posición 0 "-1 Luis" en la posición 2 "-2 Pablo" despues una ves lo tienes así solo te faltaría recorrerlo, comprobar los que no están vacíos y los que tienen contenido meterlos en su respectivo text, por ejemplo: para colocar en el primer text sería: ObjetoArray[0], para el segundo text: ObjetoArray[1] y así sucesivamente.

Seguimos comentandolo a ver en que mas te puedo ayudar.


Puf demasiado para mi, no paro de mirar en foros a ver si doy con ello, entiendo lo que me dices pero mis conocimientos no llegan para saber realizarlo.
Muchas gracias
Jajaja no pasa nada tio, entonces es algo mas complicado solo encontrarlo en foro es difícil, podría dejarte algo de documentación pero claro sin una base es jodido y mas la programación.

Cualquier cosa que necesites aquí estoy.

Un saludo
Otra manera puede ser que al iniciar el juego por primera vez, tengas en el fichero tantos elementos vacíos / null como personajes tiene el juego.

El contenido del fichero lo puedes volcar a un vector/array dónde cada posición tendrá el valor vacío o nulo; a medida que vaya acertando personajes vas escribiendo en esa posición del vector/array el nombre del personaje.

Antes de cerrar el juego, tendrías en el vector los nombres de los personajes que ha acertado en su posición.

Si actualizas el fichero con el contenido del vector/array, sería suficiente para la próxima vez que arranque el juego con los personajes que había acertado anteriormente.
Newton escribió:Otra manera puede ser que al iniciar el juego por primera vez, tengas en el fichero tantos elementos vacíos / null como personajes tiene el juego.

El contenido del fichero lo puedes volcar a un vector/array dónde cada posición tendrá el valor vacío o nulo; a medida que vaya acertando personajes vas escribiendo en esa posición del vector/array el nombre del personaje.

Antes de cerrar el juego, tendrías en el vector los nombres de los personajes que ha acertado en su posición.

Si actualizas el fichero con el contenido del vector/array, sería suficiente para la próxima vez que arranque el juego con los personajes que había acertado anteriormente.

Me han contestado esto en un foro de visual basic, pero me da error. Entiendo la idea y es justo lo que necesitaba.
Para guardar los datos me dicen que haga esto:
Print #1, ("1" & "," & TextBox1.Text)

Print #1, ("2" & "," & TextBox2.Text)

Print #1, ("3" & "," & TextBox3.Text)

Print #1, ("4" & "," & TextBox4.Text)
De esta manera se coloca delante del texto un numero que corresponde al textbox donde fue escrito.
Ahora para leerlo me dicen esto:

Dim Linea As String
Line Input #1,Linea
Dim tokenArray As String = Split(Linea)
int num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Esto ya no lo entiendo tan bien a parte de que me da error de compilacion/sintaxis en la linea Dim tokenArray As String = Split(Linea)

Yo lo de leer los datos lo pongo en el load del formulario para que nada mas que se abra ya coloque los datos.
Alguna idea?
no te sería mas cómodo usar una base de datos en vez de almacenar en texto?
cHukAs escribió:...

Dim Linea As String
Line Input #1,Linea
Dim tokenArray As String = Split(Linea)
int num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Esto ya no lo entiendo tan bien a parte de que me da error de compilacion/sintaxis en la linea Dim tokenArray As String = Split(Linea)

Yo lo de leer los datos lo pongo en el load del formulario para que nada mas que se abra ya coloque los datos.
Alguna idea?


Eso parace vb net

Hace mucho que ya no toco el vb6, pero mira asi:

Dim Linea As String,num as Integer
Dim tokenArray As String

Line Input #1,Linea
tokenArray = Split(Linea)
num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]
alex120 escribió:
cHukAs escribió:...

Dim Linea As String
Line Input #1,Linea
Dim tokenArray As String = Split(Linea)
int num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Esto ya no lo entiendo tan bien a parte de que me da error de compilacion/sintaxis en la linea Dim tokenArray As String = Split(Linea)

Yo lo de leer los datos lo pongo en el load del formulario para que nada mas que se abra ya coloque los datos.
Alguna idea?


Eso parace vb net

Hace mucho que ya no toco el vb6, pero mira asi:

Dim Linea As String,num as Integer
Dim tokenArray As String

Line Input #1,Linea
tokenArray = Split(Linea)
num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Ahora dice que no coinciden los tipos en la linea de num = Cint(tokenArray(0))
cHukAs escribió:
alex120 escribió:
cHukAs escribió:...

Dim Linea As String
Line Input #1,Linea
Dim tokenArray As String = Split(Linea)
int num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Esto ya no lo entiendo tan bien a parte de que me da error de compilacion/sintaxis en la linea Dim tokenArray As String = Split(Linea)

Yo lo de leer los datos lo pongo en el load del formulario para que nada mas que se abra ya coloque los datos.
Alguna idea?


Eso parace vb net

Hace mucho que ya no toco el vb6, pero mira asi:

Dim Linea As String,num as Integer
Dim tokenArray As String

Line Input #1,Linea
tokenArray = Split(Linea)
num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Ahora dice que no coinciden los tipos en la linea de num = Cint(tokenArray(0))


Tendrás que ver cómo funcionan las funciónes cint() http://www.vb6.us/tutorials/learn-how-c ... data-types y split http://www.vb6.us/tutorials/vb-string-a ... oin-filter para ver si pueden venir por ahí los problemas.

Lo primero tener clara la idea/algoritmo en pseudocodigo [con tus palabras] después transformalo a un lenguaje que sepas cómo funcionan las estructuras, tipos de datos, funciones etc.

Ir haciendo sobre la marcha al final sale caro.

¿Cual es la razón por la que utilizas Visual Basic 6? Igual tienes otro lenguaje que te sea más fácil y puedas hacer lo que quieres.
cHukAs escribió:
alex120 escribió:
cHukAs escribió:...

Dim Linea As String
Line Input #1,Linea
Dim tokenArray As String = Split(Linea)
int num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Esto ya no lo entiendo tan bien a parte de que me da error de compilacion/sintaxis en la linea Dim tokenArray As String = Split(Linea)

Yo lo de leer los datos lo pongo en el load del formulario para que nada mas que se abra ya coloque los datos.
Alguna idea?


Eso parace vb net

Hace mucho que ya no toco el vb6, pero mira asi:

Dim Linea As String,num as Integer
Dim tokenArray As String

Line Input #1,Linea
tokenArray = Split(Linea)
num = Cint(tokenArray(0))
Select case num
case 1
TextBox1.Text = tokenArray[1]
case 2
TextBox1.Text = tokenArray[2]

Ahora dice que no coinciden los tipos en la linea de num = Cint(tokenArray(0))


Pon esto antes de esa linea:

Debug.Print "{" + tokenArray(0) + "}"

Pon un punto de interrupcion en codigo en esa linea y despues ejecuta el codigo.



Posiblemente tokenArray(0) no se un numero entero.


Puedes usar la funcion isnumeric para comprobar que se numero antes de la conversion.
Guardar en txt plano no tiene mucho sentido.
Mejor usa Xml o base de datos local.

Que se puede, sí... Pero ya que refrescas la memoria hazlo de una forma más correcta mejor. Y eso si quieres refrescar con vb6, que yo de ti si no es por algo concreto daría el paso a c#.
13 respuestas