[C con Clase] Problema al leer datos de un documento externo al programa
Steven Davidson
srd4121 en njit.edu
Lun Abr 16 00:16:31 CEST 2012
Hola Marcos,
On 4/15/2012 5:05 PM, Marcos Collado wrote:
> Creo que el título se entiende poco, a ver si me explico mejor por
> aquí:
>
> Estoy intentando realizando un programa por el cual escriba datos en
> un documento .dat y lea de ellos. El caso es que tiene una estructura
> el documento:
>
> PRODUCTOS
>
> id producto "nombre" precio_compra precio_venta stock num_unidades
>
> ...
>
> id producto "nombre" precio_compra precio_venta stock num_unidades
>
> FIN PRODUCTOS
>
> Entonces como puedo hacer para leer los datos por ejemplo de
> precio_compra y luego reescribirlos en esa misma zona?
>
Necesitas más información en cuanto a la estructura o formato del
fichero al igual que el "tipo" o modo de fichero: texto o binario.
Sugiero que consultes nuestro curso sobre el Manejo de Ficheros en
nuestra página; puedes ir directamente a:
http://c.conclase.net/ficheros/index.php
Si se trata de un fichero binario con una longitud fija de los registros
y por tanto de los campos, entonces no debería resultarte difícil
acceder justamente a ese "campo" tanto para leer de ello como para
modificarlo. Por ejemplo,
[id_producto (4 bytes)] [nombre (64 bytes)] [precio_compra (4)]
[precio_venta (4)] [stock (4)] [num_unidades (4)]
Entonces el problema se convierte en una cuestión de calcular el
desplazamiento (en bytes) desde el comienzo del fichero. De hecho,
podemos pensar que el fichero no es más que un array y por tanto, nos
interesa calcular el "índice" para llegar a tal byte. En el ejemplo
anterior, cada registro es de 84 bytes. Si queremos calcular el
desplazamiento para acceder al campo 'stock' del tercer registro,
entonces tenemos que hacer unos cálculos:
- Nos saltamos los dos primeros registros de 84 bytes cada uno: 2 * 84 =
168 bytes.
- Nos saltamos los primeros 76 bytes = 4 + 64 + 4 + 4.
- Su suma es el desplazamiento total: 168 + 76 = 144 bytes.
Al realizar un cambio de posición de 144 bytes desde el comienzo del
fichero, nuestro cursor del fichero se ubica al comienzo de la
información que representa la cantidad de artículos en existencia
(stock). Ahora podemos acceder a los 4 bytes que representan la cantidad
guardada.
Si se trata de un fichero de texto y se guarda la información con
diferentes longitudes, entonces no podemos acceder tan directamente.
Asimismo, la modificación de la información puede conllevar a un cambio
de longitud o tamaño de caracteres y por tanto estaríamos reemplazando
la información que no queremos modificar, pero que existe
consecutivamente a la que sí queremos modificar.
La solución es,
1. Copiar la información posterior,
2. Modificar la información que nos interesa, y
3. Volver a copiar la información posteriormente.
También podemos crear un nuevo fichero y realizar varias copias del
fichero original; esto es,
1. Copiar del fichero original al nuevo toda la información hasta llegar
a la información a modificar,
2. Copiar la nueva información que nos interesa al nuevo fichero, y
3. Copiar del fichero original al nuevo toda la información posterior a
la modificación.
Espero que todo esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase