UNIDAD 6: C++ REGISTROS Y ARCHIVOS DIRECTOS

TEMA 4: BUSQUEDA ARCHIVOS C++


En este tema se analiza la busqueda de un registro o renglón determinado.

En este proceso el usuario del programa quiere que se despliegue un y solo un registro de información proporcionando un dato de busqueda generalmente la clave del registro.

Recordar que en esta operación se muestra la diferencia fundamental entre archivos secuenciales y archivos directos, es decir aqui se puede accesar directamente un registro n cualesquiera.

Prog28.cpp


#include <stdio.h>

#include <conio.h>

#include <string.h>

struct {

int clave;

char nombre[30];

int edad;} animalito;

void main() {

clrscr();

// cargando clave a buscar

printf("dame clave buscar:");

int claveb; scanf("%d",&claveb);

//abriendo, leyendo,cargando estructura

FILE *archdisco;

archdisco = fopen("cpp:\\ac\\archivo1.dat","ab+");

// usar fseek() para posicionarse al principio de registro buscado

fseek (archdisco, (long)(claveb)* sizeof(animalito), 0 );

// ahora se lee el registro

fread(&animalito,sizeof(animalito),1,archdisco);

// desplegando estructura y asegurandose

printf("%d ",animalito.clave);

printf("%s ",animalito.nombre);

printf("%d ",animalito.edad);

printf("\n");

// no olvidar cerrar archivo

fclose(archdisco);

getchar();getchar();

}

corrida:

image223.jpg

Como se desprende del programa usando fseek() es posible posicionarse en cualquier byte del archivo.

El formato completo de fseek() es:

fseek(apuntador,(long)(clave)*(sizeof(registro)),0);

donde los parametros son:

1. Apuntador al archivo en disco

2. El segundo parametro es el BYTE donde se quiere que empieze la lectura o grabación al archivo en disco.

3. Este BYTE debe ser de tipo LONG asi que si en algun programa de ejemplo ven fseek( , 387L, ); que no les llame la atención, es otra manera de hacerle cast a un dato.

Como va a estar dificil que se le atine a un byte determinado, es por eso que en el programa mejor se deja que sea el propio servidor quien calcule el byte donde empieza un registro determinado con clave * sizeof o tamaño de registro.

4. El tercer parametro es a partir de donde se quiere posicionar el apuntador interno del archivo, los valores pueden ser:

0 → SEEK_SET principio del archivo.

1 → SEEK_CUR posicion actual.

2 → SEEK_END fin del archivo.

RECORDAR QUE ES MUY IMPORTANTE QUE LAS CLAVES GRABADAS EN UN ARCHIVO DIRECTO TENGAN LA SECUENCIA 0,1,2,3,4,5…..N

TAREAS PROGRAMACION C++

Construirles programas de busquedas a los archivos ya construidos.

 


 


Driven by DokuWiki

Politica de Privacidad