sábado, 25 de octubre de 2008

Compacta.bas

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        
'
'______________________________________________________________________
'         
SUB Compacta
   DIM registro AS tipopersona
   numregS = (LOF(1) / LEN(registro)) 'Calculamos cuantos registros hay

   AbreArchivo "Agenda.tmp" 'Creamos archivo temporal para ir copiando
                            'registros si no est n borrados y quedarnos
                            'solo con los que sirven.
   CLS
   PRINT , "COMPACTAR BASE DE DATOS"
   PRINT
   PRINT "Compactando..."
   PRINT

   n1 = 1 'Contador para recorrer archivo original
   n2 = 1 'Contador para recorrer archivo nuevo
   WHILE n1 <= numregS
      GET #1, n1, registro

      IF registro.nombre <> SPACE$(LEN(registro.nombre)) OR registro.direccion <> SPACE$(LEN(registro.direccion)) OR registro.telefono <> SPACE$(LEN(registro.telefono)) OR registro.edad <> -1 THEN
         'Si el registro no est  vac¡o lo copiamos al nuevo fichero
         PUT #2, n2, registro
         n2 = n2 + 1  'Y aumentamos su contador
      END IF
      n1 = n1 + 1 'aumentamos el contador del fichero original siempre
   WEND
                                         
   CLOSE 'Cerramos LOS DOS archivos

   KILL "Agenda.dat" 'Borramos el archivo viejo
   NAME "Agenda.tmp" AS "Agenda.dat"'Renombramos el temporal como "Agenda.dat"
  
   AbreArchivo "Agenda.dat" 'Abrimos para seguir normalmente con el programa

   'ahora sacamos un mensaje para terminar
   PRINT
   PRINT "La base de datos ha sido compactada"
   SLEEP
END SUB

No hay comentarios: