Como Registrar datos en un Archivo
Para grabar datos en un Archivo a manera de tablas usamos la técnica del acceso aleatorio
para hacer esto necesitas los siguientes pasos:
1.- Definir una estructura o registro con tus campos
la mas facil y la que sugiero es grabar los datos todos como cadenas
ejemplo de estructura
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
Aqui se define una estructura llamada video que tiene los siguientes campos: NOMBRE,ESTUDIO,GENERO y PRECIO
nombre es el nombre de la Pelicula por ejemplo "BEN HUR" tienes 12 espacios para registrar el nombre
estudio el nombre del estudio donde se grabo por ejemplo "FOX" tienes 12 espacios para registrar el estudio
genero El genero quiza puede ser comedia, drama etc. tienes 12 espacios para registrar el genero
precio el precio de la pelicula tienes 12 espacios para registrar el precio
la estructura tiene una longitud lacual se sabe con la funcion LEN
por ejemplo PRINT LEN(Video) arroja 48 que es la suma de 12+12+12+12
2.- Crear una variable de trabajo que maneje la estructura o registro y que sea conocida por todos los SUBs
DIM SHARED Mypel AS video
Aqui Mypel cumplira ese proposito de tal forma que podamos tener
Mypel.nombre
Mypel.estudio
Mypel.genero
Mypel.precio
Por ejemplo podriamos hacer cosas como PRINT mypel.nombre para mostrar en pantalla el nombre de una pelicula
o tambien podemos hacer Mypel.precio = 15 para asignar un precio 15 a la pelicula.
Como esta variable Mypel debe ser conocida por todo el programa la declaramos con SHARED
Entonces DIM SHARED Mypel AS video no es otra cosa mas que decirle al computadora que Mypel es una variable de tipo video que sera conocida por todos los SUBs incluyendo al programa principal.
3.- Instrucciones que nos permitan manejar archivos o ficheros
Usaremos
OPEN .- Para abrir un Fichero o crear uno nuevo
PUT .- para grabar un registro de nuestra tabla ( osea un nuevo renglon en la tabla)
Lof(1) .- para conocer el tamaño del archivo en Bytes
Len(Mypel) .- Para saber cuantos bytes consume un registro o renglon
Close .- Cerrar todos los ficheros abiertos
para saber La cantidad de registros guardados en un fichero podemos hacer
CantReg = Lof(1) / Len(mypel)
por ejemplo si el fichero tiene 4800 bytes y la longitud de Mypel es 48 entonces dividiendo tenemos 100 registros guardados en el fichero. osea CantReg valdría 100
Ejemplo de Open
OPEN "peli.txt" FOR RANDOM AS #1 LEN = LEN(Mypel)
Abre el fichero peli.txt para leer o grabar dentro de el
otro ejemplo
xnombre$= "peli.txt"
OPEN xnombre$ FOR RANDOM AS #1 LEN = LEN(Mypel)
Abre el fichero peli.txt para leer o grabar dentro de el
otro ejemplo
xnombre$= "p"
xnombre$= xnombre$ + "eli"
xnombre$= xnombre$ + ".txt"
OPEN xnombre$ FOR RANDOM AS #1 LEN = LEN(Mypel)
Abre el fichero peli.txt para leer o grabar dentro de el
otro ejemplo
xnombre$= "c:\p"
xnombre$= xnombre$ + "eli"
xnombre$= xnombre$ + ".txt"
OPEN xnombre$ FOR RANDOM AS #1 LEN = LEN(Mypel)
Abre el fichero c:\peli.txt para leer o grabar dentro de el; ojo el archivo esta en el directorio principal de su disco duro
otro ejemplo
xnombre$= xnombre$ + "a:\peli.txt"
OPEN xnombre$ FOR RANDOM AS #1 LEN = LEN(Mypel)
Abre el fichero a:\peli.txt para leer o grabar dentro de el; ojo el archivo esta en el diskette
otro ejemplo
input xnombre$
OPEN xnombre$ FOR RANDOM AS #1 LEN = LEN(Mypel)
Pregunta que archivo quieres abrir, si el archivo no existe lo crea.
Ejemplo de Put
Para que sus datos se graben como un registro nuevo debes usar PUT
antes de usar put (grabar) debes llenar las variables registros
Ejemplo de como grabar un nuevo registro
PRINT "Ingrese datos para una nueva pelicula"
PRINT "_____________________________________"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
' guardar en archivo
posicion = Lof(1)/Len(Mypel) + 1
PUT #1, posicion, Mypel
Ejemplo de como grabar un registro en un renglon especifico
PRINT "Ingrese datos para el tercer registro"
PRINT "_____________________________________"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
' guardar en archivo
PUT #1, 3, Mypel
Close
Donde 3 es la posicion
Otro ejemplo:
PRINT "Ingrese datos para una posicion cualquiera"
PRINT "__________________________________________"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
' guardar en archivo
Input mipos
if mipos < (lof(1)/Len(mypel))
PUT #1, mipos, Mypel
else
Print "No se puede grabar alli"
end if
Close
Veamos ahora el programa completo
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
DIM SHARED Mypel AS video
CLOSE ' cierra todo si hay algo abierto previamente
swreg = 1
prog$ = "peli.txt"
OPEN prog$ FOR RANDOM AS #1 LEN = LEN(Mypel)
DO WHILE (swreg = 1)
CLS
'leer las variables
PRINT "Ingrese los datos de un nuevo producto"
PRINT "______________________________________"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
' guardar en archivo
numreg = lof(1)/Len(Mypel)+1
PUT #1, numreg, Mypel
INPUT "Desea continuar Ingresando datos (S/N)", desea$
IF UCASE$(desea$) <> "S" THEN
swreg = 0
END IF
LOOP
CLOSE
Como visualizar los datos guardados en un Archivo
Para visualizar los datos que hemos grabado en un Archivo a manera de tablas
necesitas los siguientes pasos:
1.- Definir el diseño de tu registros con TYPE
2.- Crear la varible de trabajo con DIM SHARED
3.- Aperturar el Archivo con OPEN
4.- Mostrar los Registros en la pantalla
5.- cerrar el Archivo
6.- Finalizar
1.- Definir una estructura o registro con tus campos
como ya lo hemos visto en el email anterior defino el registro
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
2.- Crear una variable de trabajo
DIM SHARED Mypel AS video
3.- Abrir el Archivo con OPEN
prog$ = "peli.txt"
OPEN prog$ FOR RANDOM AS #1 LEN = LEN(Mypel)
4.- Mostrar todos los registros
Para mostrar todos los registros primero calculamos la cantidad de registros que tiene el archivo
con
numreg = lof(1)/Len(Mypel)
Luego necesitamos una estructura repetitiva que vaya de 1 hasta la cantidad de registros numreg y que
en cada vuelta muestre los datos en la pantalla
For x = 1 to numreg
GET #1, x, Mypel
print Mypel.nombre
print Mypel.nombre
print Mypel.estudio
print Mypel.genero
print Mypel.precio
Next
Close
Uso de GET
Get me permite leer un registro del archivo
su forma de uso es
GET #1, Numero_de_registro_que_voy_a_leer, Variable_de_Trabajo
Así que suponga que x vale 3 entonces Get #1,x,Mypel leerá el tercer registro de la tabla guardada en el archivo "Peli.txt" y almacenara los datos en la estructura Mypel de tal forma que
yo puedo hacer PRINT Mypel.Nombre y mostrar el nombre guardado en el 3er registro del archivo
Veamos ahora el programa completo
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
DIM SHARED Mypel AS video
CLOSE ' cierra todo si hay algo abierto previamente
prog$ = "peli.txt"
OPEN prog$ FOR RANDOM AS #1 LEN = LEN(Mypel)
numreg = lof(1)/Len(Mypel) ' calcula cuantos registros hay
For x = 1 to numreg
CLS
GET #1, x, Mypel ' leer el registro x del archivo peli.txt
Print "Estamos viendo el registro :";numreg
print "-----------------------------------"
print Mypel.nombre
print Mypel.nombre
print Mypel.estudio
print Mypel.genero
print Mypel.precio
input "presiona ENTER para ver el siguiente....",qqq
Next
CLOSE
END
Como Modificar los datos guardados en un Archivo
Para Modificar los datos que hemos grabado en un Archivo a manera de tablas
necesitas los siguientes pasos:
1.- Definir el diseño de tu registros con TYPE
2.- Crear la varible de trabajo con DIM SHARED
3.- Aperturar el Archivo con OPEN
4.- Pedir que registro deseas modificar
5.- Pedir los nuevos datos
6.- Grabar los datos
7.- Cerrar el archivo
8.- Salir
1.- Definir una estructura o registro con tus campos
como ya lo hemos visto en el email anterior defino el registro
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
2.- Crear una variable de trabajo
DIM SHARED Mypel AS video
3.- Abrir el Archivo con OPEN
prog$ = "peli.txt"
OPEN prog$ FOR RANDOM AS #1 LEN = LEN(Mypel)
4.- Pedir el Numero de Registro a modificar
Primero calculamos la cantidad de registros
numreg = lof(1)/Len(Mypel)
Luego Pedimmos el Registro
Input "Ingrese el Nro de Registro....",nro
Validamos si el número es correcto, si se puede entonces leemos el registro
If nro <= 0 or nro > Numreg then
Print "NUMERO ES INVALIDO"
End ' Finaliza el Programa por no poder realizar la tarea
Else
get#1, nro, Mypel
Print "Estamos viendo el registro :";nro
print "--------------------------------"
print Mypel.nombre
print Mypel.nombre
print Mypel.estudio
print Mypel.genero
print Mypel.precio
End if
5.- Pedir Los Nuevos Datos
PRINT "Ingrese los datos corregidos"
PRINT "----------------------------"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
6.- Grabar los datos Modificados
Put#1,nro,Mypel
7.- Cerrar el archivo
Close
8.- Finalizar
End
Veamos ahora el programa completo
TYPE video
nombre AS STRING * 12
estudio AS STRING * 12
genero AS STRING * 12
precio AS STRING * 12
END TYPE
DIM SHARED Mypel AS video
CLOSE ' cierra todo si hay algo abierto previamente
prog$ = "peli.txt"
OPEN prog$ FOR RANDOM AS #1 LEN = LEN(Mypel)
numreg = lof(1)/Len(Mypel) ' calcula cuantos registros hay
Input "Ingrese el Nro de Registro....",nro
If nro <= 0 or nro > Numreg then
Print "NUMERO ES INVALIDO"
End ' Finaliza el Programa por no poder realizar la tarea
Else
get#1, nro, Mypel
Print "Estamos viendo el registro :";nro
print "--------------------------------"
print Mypel.nombre
print Mypel.nombre
print Mypel.estudio
print Mypel.genero
print Mypel.precio
End if
PRINT "Ingrese los datos corregidos"
PRINT "----------------------------"
PRINT
INPUT "Nombre de la Pelicula....", Mypel.nombre
INPUT "Estudio de grabacion.....", Mypel.estudio
INPUT "Genero...................", Mypel.genero
INPUT "Precio...................", Mypel.precio
Put#1,nro,Mypel
CLOSE
End
Como pasar datos de un archivo a otro
Para pasar datos de un archivo a otro
necesitas 2 instrucciones OPEN
prog1$ = "peli.txt"
OPEN prog1$ FOR RANDOM AS #1
LEN = LEN(Mypel)
prog2$ = "drama.txt"
OPEN prog2$ FOR RANDOM AS #2 LEN = LEN(Mypel)
Leeremos datos del #1 y grabaremos en el #2
Este programa solo pasará las peliculas cuyo genero sea DRAMA
Veamos ahora el programa completo
TYPE video
nombre AS STRING * 12
estudio AS STRING
* 12
genero AS STRING * 12
precio AS STRING *
12
END TYPE
DIM SHARED Mypel AS video
CLOSE ' cierra todo si hay algo abierto
previamente
prog1$ = "peli.txt"
OPEN prog1$ FOR RANDOM AS #1 LEN = LEN(Mypel)
prog2$ = "drama.txt"
OPEN prog2$ FOR RANDOM AS #2 LEN = LEN(Mypel)
numreg = lof(1)/Len(Mypel) ' calcula cuantos registros hay en el numero #1
regpasados = 0
For x = 1 to Numreg
get#1, nro, Mypel
rem ver en la ayuda del qbasic las funciones Left$ y ucase$
If ucase$(Left$(Mypel.genero,5)) = "DRAMA" then ' si la 5 primeras letras en mayusculas = DRAMA
Put #2, Lof(2)/Len(Mypel)+1, Mypel
regpasados = regpasados + 1
End if
Next
Close
Print "Se lograron pasar "; regpasados ; " registros de tipo DRAMA"
rem ***************************
rem ******** visualizar ******
rem ***************************
Input "Deseas verlos (S/N)", verlos$
verlos$ = ucase$(verlos$)
if verlos$ = "S" then
prog1$ = "drama.txt"
OPEN prog1$ FOR RANDOM AS #1 LEN = LEN(Mypel)
For x = 1 to Lof(1)/Len(Mypel)
get#1,x,Mypel
PRINT
PRINT Mypel.nombre;"
";
PRINT Mypel.estudio;"
";
PRINT Mypel.genero;"
";
PRINT Mypel.precio;"
";
Next
close
End if
rem ***************************
rem ******** borrar **********
rem ***************************
Input "Deseas borrar el archivo DRAMA (S/N)", borrar$
borrar$ = ucase$(borrar$)
if borrar$ = "S" then
kill "drama.txt"
print "archivo DRAMA.TXT fue eliminado del disco
End if
End