UNIDAD 6: REGISTROS Y ARCHIVOS DIRECTOS

TEMA LINUX GCC 4: BUSQUEDA

En este TEMA LINUX GCC 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.

Prog31.html

<HTML>
<FORM ACTION="http://192.168.1.251/~tusitio/cgi-bin/prog31.cgi" METHOD=post>
CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR>
<INPUT TYPE=submit VALUE=BUSCAR>
</FORM></HTML>

corrida:

image72.jpg

prog31.cpp

#include <string>
#include <iostream>
#include <lcnet.h>
using namespace std;
static struct {
int clave;
char nombre[30];
int edad;
} animalito;
int main() {
// cargando clave a buscar
int clave=getinteger("CLAVE");
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
//abriendo, leyendo,cargando estructura
FILE *archdisco;
archdisco = fopen("//home//tusitio//animalito.dat","r+");
// usar fseek() para posicionarse al principio de registro buscado
fseek (archdisco, (long)(clave)* sizeof(animalito), 0 );
// ahora se lee el registro
fread(&animalito,sizeof(animalito),1,archdisco);
// desplegando estructura
if ( clave == animalito.clave)
cout << animalito.clave <<" "<<animalito.nombre<<" "<<animalito.edad<<endl;
// no olvidar cerrar archivo y pagina
fclose(archdisco);
cout << "</html>" << endl;
return 0;
}

corrida:

image100.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.

  1. 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.

PROBLEMAS PROPUESTOS

Construirles programas de busquedas a los archivos ya construidos.

Politica de Privacidad