ProgramacionFacil

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.

 




 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Politica de Privacidad