Visual Basic - problema con archivo

Life is soft - evento anual de software empresarial
 
Vista:

problema con archivo

Publicado por rafa (3 intervenciones) el 31/07/2007 20:23:27
Estoy haciendo un ejercicio con archivos. Tengo 3 archivos, uno con preguntas, el otro con las respuestas de cada pregunta y un tercero para ver si la pregunta ya fue cargada, evitando repetir las preguntas. En un textbox coloco la cantidad de preguntas y respuestas que quiero generar y luego empiezo a generar.
Entonces busca en el archivo de preguntas y empieza a cargar cada pregunta en un listview, buscando luego su respectiva respuesta en el otro archivo y cargàndolo en otro listview
Bien el problema que tengo, es que coloco la cantidad de preguntas y respuestas que quiero generar pero después de la primer pregunta y respuesta cargada me salta un error con la búsqueda de la pregunta.
Si alguien me puede indicar el problema o como hacerlo de otra forma le estoy eternamente agradecido.

preguntas.txt
"1-¿está la llama que llama?"
"2-¿Quién es tulito?"
"3-¿como se llama la novia del melli?"
"4-¿quien es ramón?"
"5-¿que es vb?"

respuestas.txt
"1-sí, con el chivo que chiva"
"2-el hombre show"
"3-ramoma"
"4-un tipito"
"5-lenguaje de prog"

repeticion.txt
"1"

Private Sub Command3_Click()
Dim cont As Integer
Open App.Path & "\preguntas.txt" For Input As #5
'bandera para la primera vez que abro el archivo
ban = 0
'contador para la cantidad de preguntas que quiero
cont = 0
'le paso cuantas preguntas quieren ser cargadas
cantpreg = Me.txtcantpreg

While cont <> cantpreg Or Not EOF(5)
Input #5, pregleida

'busco la pos del nro de pregunta
varnropos = InStr(pregleida, "-") - 1
'encuentro el nro
varnro = Mid(pregleida, varnropos, 1)

'bandera para ver si ya esta cargada la pregunta
iguales = 0

'cuando abre por primera vez el archivo
If ban = 0 Then
'abro el archivo para empezar a grabar las preguntas ya cargadas
Open App.Path & "\repeticion.txt" For Output As #6
Write #6, varnro

'cargo la pregunta leída en el listview
Me.listviewpreg.View = lvwList
Me.listviewpreg.ListItems.Add = pregleida

'cierro el archivo repeticion.txt
Close #6

'activo la bandera
ban = 1

'busco la respuesta con el nro de pregunta
Open App.Path & "\respuestas.txt" For Input As #7
While Not EOF(7)
Input #7, filaleida
varnropospreg = InStr(filaleida, varnro)
varnropregbuscada = Mid(filaleida, varnropospreg, 1)

If varnro = varnropregbuscada Then
'agrego en otro listview la respuesta
With Me.listviewresp
.View = lvwList
.ListItems.Add = filaleida
End With

End If
Wend
'se aumente el contador del while para la cant. de preguntas
cont = cont + 1
'cierro el archivo respuestas.txt
Close #7

Else 'cuando ya no es la primera vez que lee
'abro el archivo de repeticiones
Open App.Path & "\repeticion.txt" For Input As #6
While Not EOF(6)
Input #6, varrepet

'me fijo si la pregunta leida del archivo ya fue cargada antes
If varrepet = varnro Then
iguales = 1
End If
Wend
'cierro el archivo repeticion.txt
Close #6

If iguales <> 1 Then
Open App.Path & "\repeticion.txt" For Append As #6
Write #6, varnro
Close #6

'agrego la pregunta cargada al listview
With Me.listviewpreg
.View = lvwList
.ListItems.Add = pregleida
End With

'busco la respuesta con el nro de pregunta
Open App.Path & "\respuestas.txt" For Input As #8
While Not EOF(8)
Input #8, filaleida
varnroposresp = InStr(filaleida, varnro)
varnrorespbuscada = Mid(filaleida, varnroposresp, 1)

If varnro = varnrorespbuscada Then
'agrego en otro listview la respuesta
With Me.listviewresp
.View = lvwList
.ListItems.Add = filaleida
End With

End If
Wend
Close #8

'aumento el contador para la cant.de preguntas
cont = cont + 1
End If


End If

'cierro el bucle
Wend

'cierro el archivo de preguntas
Close #5

End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con archivo

Publicado por Cargoso (1 intervención) el 31/07/2007 22:32:38
Disculpa tu no eres Rafael el que vive en Montero?, pues estoy yendo para allá y te puedo dar una mano si gustas, si es que no eres quien estoy pensando disculpa voy a analizar tu problema y te responderé luego. hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Re:problema con archivo

Publicado por Rafa (3 intervenciones) el 01/08/2007 06:01:24
No soy la persona de esa ciudad lamentablemente.

Ahora lo estuve haciendo de vuelta, la lógica fue ésta:
Recorre el archivo de preguntas(preguntas.txt) y los pasa a los números de cada pregunta a otro archivo que lo crea(cantidadpreguntas.txt).
De ahì lo recorre al archivo de nros(cantidadpreguntas.txt) y busca el número máximo y mínimo.
A continuación genera números aleatorios entre los valores max y min
y busca la pregunta y la respuesta de cada número generado, en sus respectivos archivos, y los muestra por los listview.

Me genera las preguntas, las muestra pero no funciona bien con la condición de cuántas preguntas quiero que genere, por ejemplo pongo 3 preguntas y me genera una, aprieto de vuelta y me genera 2, vuelvo a generar y me salen 3.

Acá está el código nuevo:


Private Sub Command3_Click()



'abro preguntas para llevar los nros de cada pregunta a cantidadpreguntas.txt

Open App.Path & "\preguntas.txt" For Input As #5



'creo cantidadpreguntas para grabar los nros de pregunta que hay

Open App.Path & "\cantidadpreguntas.txt" For Output As #6



While Not EOF(5)

Input #5, filaleida

buscanro = Left(filaleida, 1)

Write #6, buscanro

Wend



'cierro preguntas

Close #5



'cierro cantidadpreguntas

Close #6



'variables para menor y mayor de las preguntas hechas

Dim varmin As Integer

Dim varmax As Integer

Dim bandmin As Integer

Dim bandmax As Integer



varmin = 0

bandmin = 0

varmax = 0

bandmax = 0



'recorro cantidadpreguntas.txt para sacar el valor min y max

Open App.Path & "\cantidadpreguntas.txt" For Input As #6

While Not EOF(6)

Input #6, filaleida

'busca el valor menor

If bandmin = 0 Then

varmin = filaleida

bandmin = 1

ElseIf filaleida < varmin Then

varmin = filaleida

End If

'busca el valor mayor

If bandmax = 0 Then

varmax = filaleida

bandmax = 1

ElseIf filaleida > varmax Then

varmax = filaleida

End If

txtmin.Text = varmin

txtmax.Text = varmax


Wend



'cierro cantidadpreguntas.txt

Close #6


'para generar la semilla de los números aleatorios

Randomize


'variable para la cantidad de preguntas

Dim contadorpreg As Integer


contadorpreg = 0


cantpreg = Val(Me.txtcantpreg.Text)



'abro preguntas.txt para buscar la pregunta

Open App.Path & "\preguntas.txt" For Input As #8


'abro respuestas.txt para buscar la pregunta

Open App.Path & "\respuestas.txt" For Input As #9


'bandera cuando encuentra la pregunta

Dim pregencontrada As Integer

'bandera cuando encuentra la respuesta

Dim respencontrada As Integer


Dim nropregunta As Integer

Dim nrorespuesta As Integer


While contadorpreg < cantpreg 'And Not EOF(8) And Not EOF(9)

pregencontrada = 0
respencontrada = 0

nroaleatorio = Int((varmax - varmin) * Rnd + varmin)


While pregencontrada <> 1 And Not EOF(8)

Input #8, pregleida

nropregunta = Left(pregleida, 1)

If nropregunta = nroaleatorio Then

pregencontrada = 1

' cargo la pregunta en el listview
With Me.listviewpreg

.GridLines = True

.View = lvwList

.ListItems.Add = pregleida

End With

End If

Wend



While respencontrada <> 1 And Not EOF(9)

Input #9, respleida

nrorespuesta = Left(respleida, 1)

If nrorespuesta = nroaleatorio Then

respencontrada = 1

'cargo la respuesta en el listview

With Me.listviewresp

.GridLines = True

.View = lvwList

.ListItems.Add = respleida

End With

End If

Wend

contadorpreg = contadorpreg + 1

Wend

'cierro preguntas.txt

Close #8

'cierro respuestas.txt

Close #9



End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con archivo

Publicado por Cargoso (1 intervención) el 01/08/2007 21:44:48
Haberlo dicho antes que no eras el Rafa que yo conozco, me hubieras evitado andar tanto, en Montero ahora habían sido más de 180.000 habitantes y es mucho buscar en una ciudad así. bueno lo interesante es que andé mucho y me sentó a los riñones.

Bueno "Chamacos", nos vemos cuando vuelva de Montero, mientras tanto portense bien y no anden de mal humor porque no resuelven nada así, además que eso enferma la vesícula biliar, y no es bueno al fin y al cabo es su salud. un saludo para ustedes "chamacos", ahora recién empezaré a buscar la solución al problema planteado tras termine les aviso Ok?. Hasta pronto....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar