Visual Basic - Ayudarme, por favor

Life is soft - evento anual de software empresarial
   
Vista:

Ayudarme, por favor

Publicado por Alvaro (3 intervenciones) el 27/11/2008 18:10:15
Hola, ya escribí hace unos días en este foro pero no he tenido respuesta. Soy de Pamplona, vivo en Murcia y estudio la carrera en Vitoria. Vaya lío, eh? El caso es que me queda UNA asignatura para terminar la carrera y tengo el inconveniente de que, evidentemente, no puedo ir a preguntarle nada al profesor del que no tengo tengo forma de ponerme en contacto con él.
Necesito controlar en Visual Basic el contenido de un fichero secuencial introducido por el usuario cuyos campos van a ser de la siguiente manera:

NOMBRE DEL CAMPO MAXIMA LONGITUD TIPO DE CAMPO ESTRUCTURA
Nombre estación 3 Numérico 999
Nombre referencia 3 Numérico 999
Altura instrumento 4 Numérico 9v99
Nombre punto ob. 3 Numérico 999
Altura de la mira 4 Numérico 9v99
Lectura horizontal 8 Numérico 999v9(4)
Lectura vertical 8 Numérico 999v9(4)
Distancia 8 Numérico 9(4)v999
Comentario 20 Alfanúmero X(20)

Una menera de controlarlo, según hizo un compañero mío cuyo programa me ha dejado, sería la siguiente:


On Error GoTo ERRORES
Open CommonDialog2.FileName For Input As #2 'ABRO PARA LEER POR EL CANAL 2...
If LOF(2) = 0 Then 'FICHERO VACIO
MsgBox "EL FICHERO ESTA VACIO, META OTRO POR FAVOR", , "ERROR"
Close (2)
Exit Sub
Else 'AHORA COMPRUEBO QUE EL FORMATO ES CORRECTO
Input #2, LI_EST, LI_REF, LI_I, LI_PTO, LI_M, LI_LH, LI_LV, LI_D, LI_COM
Do While Not (EOF(2)) 'CONTROLO EL FORMATO DEL FICHERO, CON EL CONTROL DE ERRORES
Input #2, Control, Control, Control, Control, Control, Control, Control, Control, Control
Loop
'EN CASO DE ESTAR BIEN, AL HABER MIRADO TODO EL CURSOR ESTARA AL FINAL DEL FICHERO. TENGO QUE VOLVER A PONERLO AL PRINCIPIO PARA HACER DESPUES EL CALCULO
Close (2)
'ABRO OTRA VEZ PARA QUE ESTE AL INICIO
Open CommonDialog2.FileName For Input As #2
End If

ERRORES:
TIPODEERROR = ERRORES
Select Case TIPODEERROR
Case 0
Close (2)
Exit Sub
Case 1
Resume Next
Case 2
End
Case 3
End
End Select

El control de errores sería el siguiente:
Public Function ERRORES()
Dim MENSAJE As String
Dim DETIPO As Integer

Select Case Err.Number
Case 52
MENSAJE = "1:NOMBRE O NUMERO DE ARCHIVO INCORRECTO, INTENTELO DENUEVO O TERMINE." & vbCrLf & "2: ES NECESARIO QUE META UN FICHERO DE SALIDA"
DETIPO = 0

Case 53
MENSAJE = "NO SE PUDO ENCONTRAR EL FICHERO ESPECIFICADO, INTENTELO DENUEVO O TERMINE"

DETIPO = 0
Case 54
MENSAJE = "LA MODALIDAD DE ARCHIVO NO ES VALIDA, INTENTELO DE NUEVO O TERMINE"
DETIPO = 0

Case 55
MENSAJE = "EL FICHERO YA ESTA ABIERTO"
DETIPO = 1

Case 57
MENSAJE = "ERROR DE ENTRADA/SALIDA DEL DISPOSITIVO O UNIDAD"
DEPIPO = 2

Case 61
MENSAJE = "EL DISCO ESTA LLENO"
DETIPO = 2

Case 62
MENSAJE = "EL FORMATO DEL FICHERO ES INCORRECTO"
DETIPO = 0

Case 63
MENSAJE = "NUMERO DE REGISTRO INCORRECTO"
DETIPO = 0

Case 68
MENSAJE = "EL DISPOSITIVO NO ESTA DISPONIBLE"
DETIPO = 0

Case 70
MENSAJE = "PERMISO DENEGADO, ESTA PROTEGIDO CONTRA LA ESCRITURA, DESPROTEJALO TERMINE"
DETIPO = 0

Case 71
MENSAJE = "EL DISCO NO ESTA LISTO; EL DISQUETTE NO ESTA EN LA UNIDAD O SINO ESTA ABIERTO"
DETIPO = 0

Case 75
MENSAJE = "ERROR DE ACCESO A LA RUTA O AL ARCHIVO"
DETIPO = 0
RADIACION.CommonDialog3.FileName = ""

Case 76
MENSAJE = "NO SE HA ENCONTRADO LA RUTA DE ACCESO"
DETIPO = 0

Case Else
MENSAJE = "HA SURGIDO UN ERROR DESCONOCIDO:" & Err.Description & Err.Number
DETIPO = 3

End Select

MsgBox MENSAJE, , "ERROR"
ERRORES = DETIPO
End Function
'0=NO RECUPERABLE
'1=RECUPERABLE
'2=ERROR GRAVE
'3=ERROR DESCONOCIDO

A mi compañero le funciona, pero a mi me da "error desconocido" (Case else) con lo que me cierra el programa. Creo que el fallo está al controlar las variables del fichero con el "Control", pero no estoy seguro.
Espero que algien me pueda ayudar. Gracias de antemano.
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:Ayudarme, por favor

Publicado por igor (633 intervenciones) el 27/11/2008 22:11:17
Que tal si quitas el "on error goto" y pruebas a ver donde falla?
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