Ver Mensaje Individual
  #26 (permalink)  
Antiguo 19/04/2010, 10:44
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Importar de un .dat o txt a MSFlexGrid

Respecto al tema de loa archivos, te comento que la apertura de un archivo en modo RANDOM hace que se mantengan todos los datos del fichero por lo tanto suponte que tienes los siguiente registros:

1_AAAAAAAAAAAAAAAAA
2_BBBBBBBBBBBBBBBBB
3_CCCCCCCCCCCCCCC
4_DDDDDDDDDDDDDDD

tu puedes obviamente añadir registros al final tal como hacía en el post original como machacar sobre uno de los existentes para sustituir sus datos. Si un registro tiene una longitud de 256 bytes independientemente de que su campos esten llenos o vacios por lo tanto un campo STRING de 15 posiciones ocupa los mismo si contiene PEPE que si contiene HERMENEGILDO

Mientras no leas un Registro la UDT que tengas definida estará vacia, el hecho de abrir el fichero simplemente significa que está abierto.

La funciones FREEFILE te devuelve el siguiente canal disponible para ser abierto por lo tanto no puedes asignarla cada vez aunque evidentemente podrías tener un fichero abierto con distintos canales siempre que definas la cláusula SHARED para compartir archivos, por ejemplo

OPEN "CLIENTES" .... As #1 Len = 256

OPEN "CLIENTES" .... As #2 Len = 256

Si tu lees el registro 10 del archivo #1 te devolverá lo mismo que si lees el 10 del Archivo #2 puesto que ambos son el mismo fichero.

Pero atención si tienes que borrar el archivo, y sólo cierras el #1 no te permitirá hacerlo porque el #2 sigue abierto y es el mismo.

No tiene mucho sentido el ejemplo de abrir 2 archivos pero es para que te hagas una idea.

Respecto al tema de BORRAR registros de un archivo RANDOM lo que suele hacer es grabar un registro con un determinado valor que tu sepas no puede formar parte del archivo o incluso es suficiente con una única posición y entonces tu en el proceso decides como actúas con el registro.

Imagínate que decides poner un campo String o Bolean (tu decides) en mitad de una UDT que significa SUPRIMIDO por ejemplo Eliminado As Boolean

Cuando tu grabes este registro lo grabas como Eliminado = True y entonces significará para ti que lo consideras suprimido, independientemente de que puedas seguir accediendo a su información.

En este caso cuando leas un registro debes comprobar si Eliminado = True porque de ser así debes omitirlo en tus procesos por ejemplo, siguiendo lo que vimos anteriormente

Do
Registro = Registro + 1
LeerRegistro Registro
' Si es fin de Registros, salimos del bucle
IF Registro = -1 Then Exit Do

If Not(Registro.Eliminado) Then
RegistrosValidos = RegistrosValidos + 1
' Efectuar tu proceso sobre el registro
Else
RegistrosSuprimidos = RegistrosSuprimidos + 1
' Recuerda que aunque lo consideras suprimido el resto sigue ahí, podrías
' reactivarlo simplemente haciendo Suprimido = False y regrabando sobre el
End If
Loop

MsgBox "Válidos " & RegistrosValidos
MsgBox "Eliminados " & RegistrosSuprimidos


Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...