Serie ficheros virtuales

 

 

 
VBA. Ficheros virtuales


 
 
VBA. Ficheros virtuales. Estampillados para pilas y colas


1 Introducción
2 Código del estampillado directo F_STAM (AAAAMMDDHHMMSSNNNNNNNNNN)
3 Rutina de estampillado inverso (Complemento a nueves de AAAAMMDDHHMMSSNNNNNNNNNN)


4 componentes
 4.1 La función NOW (AAAAMMDDHHMMSS)
 4.2 La función TIME (HHMMSS)

 4.3 La función DATE (AAAAMMDD)


5 Fuentes

                                                                                                          ________


1 Introducción

En el interfaz final del sistema de ficheros virtuales para excell, el complemento W, se consideran emulaciones de pilas y colas. En este capítulo se consideran las funciones estampillado directo e inverso precisas para llevar a cabo la implementación.

Los estampillados que se utilizan son de longitud fija y tienen la forma AAAAMMDDHHMMSSNNNNNNNNNN en el caso directo o su complemento a nueves en el inverso, como se muestra en la imagen

 



 

En la imagen aparecen muestras de TIME y DATE de longitud fija y de su composición para estampillados. Un extracto del código asociado sigue a continuación. Al final del capítulo se incluye un enlace al módulo con el código completo.

                                                                                                          ________


2 Código del estampillado directo F_STAM (
AAAMMDDHHMMSSNNNNNNNNNN)

Option Explicit
Option Base 1

Dim lStamContador As Long ' Contador para rutinas Stam


'//---------------------------------------------------------------------------
'// Función: F_STAM
'//
'// Propósito: Devuelve estampillado en curso en formato AAAMMDDHHMMSSNNNNNNNNNN
'//
'// Parámetros: Ninguno
'//
'//  Retorno: STAM solicitado
'//---------------------------------------------------------------------------
Function F_STAM() As String

 Dim Stam As String * 24       ' Paso de estampillado directo
 Dim sFechaHora As String * 14 ' Paso de F_NOW
 Dim sContador As String * 10  ' Paso de Long2String
 
 
 ' Pasa fecha-hora
 
 sFechaHora = F_NOW()
 
 
 ' Pasa contador
 
 lStamContador = lStamContador + 1
 sContador = Long2String(lStamContador)
 
 
 ' Agrega componentes y los pasa como valor de retorno
 
 Stam = sFechaHora & sContador
 
 F_STAM = Stam
 
End Function
                                                                                                          ________


3 Rutina de estampillado inverso (Complemento a nueves de
AAAMMDDHHMMSSNNNNNNNNNN)

'//---------------------------------------------------------------------------
'// Función: F_STAMINV
'//
'// Propósito: Devuelve estampillado en curso en formato inverso
'//            9's - AAAMMDDHHMMSSNNNNNNNNNN
'//
'// Parámetros: Ninguno
'//
'//  Retorno: STAM inverso solicitado
'//---------------------------------------------------------------------------
Function F_STAMINV() As String

 Dim Stam As String * 24       ' Paso de estampillado inverso
 Dim sContador As String * 10  ' Paso de Long2String
 Dim sFechaHora As String * 14 ' Paso de la parte de fecha-hora
 Dim Fecha As Long             ' Paso de 9's - F_DATE
 Dim Hora As Long              ' Paso de 9's - F_TIME
 Dim lContador As Long         ' Paso de 9'2 - ContadorDirecto
 
 
 ' Compone la parte de fecha-hora
 
 Fecha = F_DATE()
 Fecha = 99999999 - Fecha
 
 Hora = F_TIME()
 Hora = 999999 - Hora
 
 
 ' Pasa fecha-hora
 
 sFechaHora = Fecha & Hora
 
 
 ' Pasa contador
 
 lStamContador = lStamContador + 1
 lContador = 999999999 - lStamContador
 
 sContador = Long2String(lContador)
 sContador = "9" & Right(sContador, 9)
 
 
 ' Agrega componentes y los pasa como valor de retorno
 
 Stam = sFechaHora & sContador
 
 F_STAMINV = Stam
 
End Function
                                                                                                          ________

Estas funciones hacen uso de las funciones auxiliares siguientes

4 componentes

4.1 La función NOW (AAAAMMDDHHMMSS)


'//---------------------------------------------------------------------------
'// Función: F_NOW
'//
'// Propósito: Devuelve fecha-hora en curso en formato AAAAMMDDHHMMSS
'//
'// Parámetros: Ninguno
'//
'//  Retorno: TIME solicitado
'//---------------------------------------------------------------------------
Function F_NOW() As String

 Dim Stam As String * 14 ' Paso de estampillado directo
 Dim Fecha As Long       ' Paso de F_DATE
 Dim Hora As Long        ' Paso de F_TIME
 
 Fecha = F_DATE()
 Hora = F_TIME()
 
 
 ' Compone fecha y hora, en formato de longitud fija
 
 Stam = Fecha & Hora
 If Hora < 100000 Then
    Stam = Fecha & "0" & Hora
 End If
 
 
 ' Pasa Stam construido
 
 F_NOW = Stam
 
End Function
                                                                                                          ________

4.2 La función TIME (HHMMSS)

'//---------------------------------------------------------------------------
'// Función: F_TIME
'//
'// Propósito: Devuelve hora en curso en formato HHMMSS
'//
'// Parámetros: Ninguno
'//
'//  Retorno: TIME solicitado
'//---------------------------------------------------------------------------
Function F_TIME() As Long

 Dim sHor As String    ' Paso auxiliar de Time
 Dim sMS As String * 5 ' Paso auxiliar de MM:SS
 Dim sH As String      ' Paso auxiliar de HH
 Dim lHor As Long      ' Valor de retorno HHMMSS
 
 sHor = Time
 
 
 ' Aporte de segundos
 
 lHor = CLng(Right(sHor, 2))
 
 
 ' Aporte de minutos
 
 sMS = Right(sHor, 5) ' MM:SS
 lHor = lHor + 100 * CLng(Left(sMS, 2))
 
 
 ' Aporte de horas
 
 sH = Left(sHor, 2) ' HH ó H:
 If Right(sH, 1) = ":" Then
    sH = Left(sHor, 1)
 End If
 
 lHor = lHor + 10000 * CLng(sH)
 

 ' Paso de HHMMSS construido
 
 F_TIME = lHor

End Function
                                                                                                          ________

4.3 La función DATE (AAAAMMDD)

'//---------------------------------------------------------------------------
'// Función: F_DATE
'//
'// Propósito: Devuelve fecha en curso en formato AAAAMMDD
'//
'// Parámetros: Ninguno
'//
'//  Retorno: DATE solicitado
'//---------------------------------------------------------------------------
Function F_DATE() As Long

 Dim lDate As Long ' Valor de retorno *date AAAAMMDD


 ' Fecha en curso a devolver

 lDate = Year(Date) * 10000 + Month(Date) * 100 + Day(Date)
 
 F_DATE = lDate
 

End Function

                                                                                                          ________


5 Fuentes

 

En el enlace siguiente se puede acceder al Código fuente completo del módulo F, funciones de fecha y estampillados en VBA. Además, también puede utilizarse el enlace de acceso al libro F, que recoge los ejemplos asociados al estampillado.



                                                                                                          ________