El siguiente paso sería intentar leer el registro que hemos grabado anteriormente.
Para la grabación sin usar la estructura la lectura es como sigue:
Input(Canal, Expediente) ' código
Input(Canal, Nombre)
Input(Canal, Domicilio)
Para la grabación usando la estructura la lectura es como sigue:
Input(Canal, Registro) ' código
La lectura de un archivo secuencial se basa siempre en el uso de un bucle del tipo mientras.
La estructura de dicho bucle es la que sigue:
While Not EOF(Canal)
' lectura de un registro
Input(Canal, Codigo)
Input(Canal, Denom)
Input(Canal, Cant)
Input(Canal, Preci)
' Realizar el proceso correspondiente.
End While
El proceso de actualización se basa en el emparejamiento de registros, para ello los archivos han de estar grabados en secuencia, en caso contrario no es posible realizar un proceso adecuadamente correcto.
El sistema seguido es el de high value, viejo sistema utilizado en otros lenguajes de programación, pero no por ello menos efectivo.
La filosofía es la de emparejar registros como ya se explicó en el tema anterior.
Importante que el valor utilizado como High value, no sea alcanzable por los datos del archivo.
El proceso se basa en que solo puede haber proceso de actualización si los códigos coinciden, en ese caso puede darse el caso de borrado o actualización, pero nunca un alta, eso sería un error.
Si el código del archivo principal se adelanta al de los cambios, significa que los registros hasta igualarse deben ser del tipo alta, en caso contrario sería un error en la grabación del archivo de cambios.
Si el código del archivo principal se queda por detrás significa que ese código no dispone de incidencias, por lo que debe ser copiado tal como está en el archivo que se crea nuevo en el proceso, para no perder los datos que no van a sufrir cambios.
Siempre debemos disponer de una pareja de registros, por lo que al tratar un registro del archivo principal, inmediatamente hay que leer otro.
Igual con el de los cambios.
Por este motivo antes de entrar en el bucle de proceso, se debe cargar una pareja de registros fuera del bucle.
Al realizar la lectura en un archivo si se da la circunstancia de final de archivo, es cuando al código de ese archivo se le asigna el high value.
No sirve utilizar variables de tipo booleano, ni cualquier otra combinación, cuyo único resultado al final es maquiavélico, comparado con la sencillez de éste proceso.
A continuación exponemos el núcleo del proceso.
No está completo, se ha extraído lo esencial, y se ha realizado sin el uso de estructuras.
If Not EOF(CanalMalum) Then
LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)
Else
ExpedM = Hv
End if
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End IF
While Exped <> Hv Or ExpedM <> Hv
Select Case Exped
Case Is > ExpedM ' copiar maestro
Grabacion(CanalMaes, ExpedM, NombM, Ape1M, Ape2M, DomicM)
If Not EOF(CanalMalum) Then
LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)
Else
ExpedM = Hv
End if
Case Is < ExpedM
Select Case Tipo
Case "1" ' alta
Grabacion(CanalMaes, Exped, Nomb, Ape1, Ape2, Domic)
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End IF
Case Else
' Error
LineaDet(Exped, Nomb, Ape1, Ape2, Domic, Tipo, "Actualiza")
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End If
End Select
Case Is = ExpedM
Select Case Tipo
Case "1" ' alta, error
' Línea de detalle
LineaDet(Exped, Nomb, Ape1, Ape2, Domic, Tipo, "Alta")
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End if
Case "2" ' baja, no se graba
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End if
If Not EOF(CanalMalum) Then
LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)
Else
ExpedM = Hv
End if
Case "3" ' modificación, se graba el nuevo
Grabacion(CanalMaes, Exped, Nomb, Ape1, Ape2, Domic)
If Not EOF(CanalMoviv) Then
LeerMoviv(CanalMoviv, Exped, Nomb, Ape1, Ape2, Domic, Tipo)
Else
Exped = Hv
End if
If Not EOF(CanalMalum) Then
LeerMaes(CanalMalum, ExpedM, NombM, Ape1M, Ape2M, DomicM)
Else
ExpedM = Hv
End if
End Select
End Select
End While
Para ello se utiliza la instrucción FileClose(Canal)
Y se cierra cada uno de los archivos que nos interesa.
Ejercicios propuestos de la Unidad |
Síguenos en: Facebook Sobre aulaClic Política de Cookies