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