Programación General => Visual Basic 6.0 e inferiores => Visual Basic para principiantes => Mensaje iniciado por: nicob en Miércoles 25 de Noviembre de 2009, 00:29
Título: qbasic
Publicado por: nicob en Miércoles 25 de Noviembre de 2009, 00:29
quien me puede corregir la siguiente codificacion? lo q quiero lograr es comparar la igualdad de una variable de archivo del tipo alfanumerico 1.001.000 conotra ingresasda por teclado con un input del mismo tipo, para saber si son iguales o si ya existe en el archivo. les adjunto mi codificacion sepan entender que soy nuevo en esto.'SCREEN 12 'LINE (1, 1)-(1000, 100), 15, BF 'COLOR 5 LOCATE 4, 30: PRINT "BIENVENIDOS A SU SISTEMA"
OPEN "c:qbasicfinalcuenta.txt" FOR RANDOM AS #1 LEN = 36 FIELD #1, 8 AS ccuenta$, 20 AS dcuenta$, 4 AS pini$, 4 AS pfin$ CLS
DO
x = LOF(1) / 36
DO LOCATE 8, 1: INPUT "Ingrese c para cargar o s para salir: ", sal$ IF UCASE$(sal$) = "C" OR UCASE$(sal$) = "S" THEN EXIT DO ELSE LOCATE 8, 1: PRINT " " LOCATE 9, 1: PRINT "codigo erroneo ingresa bien dolobu" SLEEP 2 LOCATE 9, 1: PRINT " " END IF LOOP
IF UCASE$(sal$) = "S" THEN PRINT "gracias por su visita" EXIT DO
ELSE
DO LOCATE 10, 1: INPUT "Ingrese cod. Cuenta: ", pccuenta$ IF VAL(pccuenta$) = 0 THEN PRINT "el codigo debe ser distinto de cero" ELSE EXIT DO END IF LOOP
IF pflia = flia THEN 'PRINT "codigo exitente" 'SLEEP 2 'CLS IF ppadres = padres THEN IF phijo = hijo THEN PRINT "codigo existente" SLEEP 2 CLS INPUT "ingrese cod cuenta: ", pccuenta$ END IF END IF ELSE
'LOCATE 12, 1: INPUT "Ingrese numero de cuenta: ", pcta$ DO LOCATE 13, 1: INPUT "Ingrese g para grabar o c para cancelar: ", can$ IF UCASE$(can$) = "G" OR UCASE$(can$) = "C" THEN EXIT DO END IF LOOP IF UCASE$(can$) = "G" THEN x = x + 1 LSET ccuenta$ = pccuenta$ LSET dcuenta$ = pdcuenta$ 'LSET cta$ = pcta$ LSET pini$ = STR$(0) LSET pfin$ = STR$(0) PUT #1, x LOCATE 14, 20: PRINT "los datos han sido guardados" SLEEP 2 ELSE LOCATE 14, 20: PRINT "los datos no han sido guardados" SLEEP 2 END IF
END IF CLS LOOP 'RUN "c:qbasicmetpuntmenu.bas"
Código: Visual Basic
Título: Re: qbasic
Publicado por: Nebire en Jueves 26 de Noviembre de 2009, 00:06
puedes poner unos datos del fichero: c:qbasicfinalcuenta.txt ?
De entrada lo que veo es que en el interior del bucle for...next no deja opciones.. Miremos los condicionales dentro del bucle
Código: Visual Basic
IF pflia = flia THEN
'PRINT "codigo exitente"
'SLEEP 2
'CLS
IF ppadres = padres THEN
IF phijo = hijo THEN
PRINT"codigo existente"
SLEEP 2
CLS
INPUT"ingrese cod cuenta: ", pccuenta$
ENDIF
ENDIF
ELSE
'EXIT DO
ENDIF
El 'exit do' está comentado, y los otros if anidados no ofrecen alternativas, por lo que los 3 if podrían suplirse como un 'if1 and if 2 and if3 luego'. Otra cosa que veo, es que señalas que quieres comparar cadenas, pero parece ser que Pflia, flia, Ppadres, padres, Phijos e hijos son variables numéricas ( pués hiciste asignación sobre ellas Val(..)).
Por lo demás, los bucles do..loop puedes condicionarlos con un while, no realizar luego dentro una instrucción a propósito para salir del bucle.
Para hacerte una corrección exhaustiva conviene que detalles cual es el propósito del programa para ver qué, no corresponde con ello.
...Básicamente es correcto, quizás en vez de field, yo usaría una estructura.. así, resulta más intuitivo qué son esas variables...
Código: Visual Basic
Type Registro
Cuenta asstring * 8
dCuenta asstring * 20
pIni asstring * 4
pFin asstring * 4
endtype
dim elReg as registro
const LargoReg= 36 ' 8+20+4+4
' utilizando una estructura en vez de field, al hacer get debes indicar el destino (o el origen al hacer put)
get #1, h,elReg
También te recomiendo usar la instrucción freefile para referirte a los ficheros:
Código: Visual Basic
dim ff asinteger
ff= freefile
open ruta forrandomas #ff len=largoReg
get #ff,1,elReg
...
close #ff
Usando freefile, puedes abrir varios archivos sin tener que recordar qué número le toca, resulta más dinámico, puedes abrir y cerrar, volver a abrir, etc... como usas una variable, no tienes que preocuparte del número de canal...
Si el tamaño del archivo es dependiente del tamaño de registro tus bucles pueden basarse en eof en vez de calcular el número de registros