UNIDAD 6: REGISTROS Y ARCHIVOS DIRECTOS

TEMA LINUX GCC 8: EDICION MODIFICACION DE REGISTROS

Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despues de un fuerte proceso de captura de registros, una revisión o consulta general muestra muchos de ellos con errores de captura.

El modelo de programación cliente-servidor que se está estudiando, facilita mucho este proceso de edición.

Para este proceso se ocupara una forma html y se ocuparan 2 PROGRAMAS CPP-CGI, el procedimiento a seguir es:

1.- la forma html pide la clave del registro a editar.

2.- el primer programa cpp-cgi es el programa normal de busqueda que ya se construyo en temas anteriores, pero al desplegar el registro se debera construir una forma html completa(llamada forma o pagina dinamica) que incluya los textboxs cargados con los datos del registro y con el form action apuntando al segundo programa cpp-cgi, observar que en general este programa lo que hace es construir una segunda forma html con los datos cargados del registro.

3.- el segundo programa cpp-cgi es activado y toma los datos de la forma dinamica, los almacena en el registro en memoria luego se posiciona en el registro en disco a modificar con fseek() y se regraba con fwrite().

Prog34.html

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

corrida prog 30 archivo original:

image105.jpg

corrida prog34.html

image83.jpg

vamos a editar el segundo registro.

Prog34.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);
// construyendo pagina dinamica y desplegando estructura
cout << " <FORM ACTION=http://192.168.1.251/~tusitio/cgi-bin/prog35.cgi METHOD=post>" << endl;
cout<< "CLAVE:<INPUT TYPE=text NAME=CLAVE VALUE=" << animalito.clave << ">" << "<br>" <<endl;
cout<< "NOMBRE:<INPUT TYPE=text NAME=NOMBRE VALUE=" << animalito.nombre << ">" << "<br>" <<endl;
cout<< "EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE=" << animalito.edad << ">" << "<br>"<< endl;
cout<< "<INPUT TYPE=SUBMIT VALUE=OK>" <<endl;
cout << "</html>" << endl;
// no olvidar cerrar archivo y pagina
fclose(archdisco);
return 0;
}

Observar que es el programa normal de busqueda pero el despliegue se realiza construyendo una pagina o forma dinamica como se observa en la siguente corrida:

image106.jpg

Prog35.cpp

#include <string>
#include <iostream>
#include <lcnet.h>
using namespace std;
static struct {
int clave;
char nombre[30];
int edad;
} animalito;
int main() {
//cargando estructura
animalito.clave=getinteger("CLAVE");
// y se debe almacenar la string como un arreglo de chars de ahí la
// necesidad de un temporal
string temp =getstring("NOMBRE");
strcpy( animalito.nombre, temp.c_str() );
animalito.edad=getinteger("EDAD");
//abriendo, grabando, cerrando
FILE *archdisco;
archdisco = fopen("//home//tusitio//animalito.dat","r+");
// usando fseek() para posicionarse al principio del registro deseado
fseek(archdisco, (long)(animalito.clave)* sizeof(animalito), 0 );
// regrabando encima
fwrite(&animalito,sizeof(animalito),1,archdisco);
fclose(archdisco);
//avisando usuario
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
cout << animalito.clave <<" "<<animalito.nombre<<" "<<animalito.edad<<endl;
cout << "<br>" << "registro regrabado y remodificado" <<endl;
cout << "</html>" << endl;
}

Este es el programa que activa la forma dinamica y que actualiza el registro editado en el archivo en disco, la logica de este programa ya se explico en el tercer parrafo de este tema.

Corrida prog30 para ver como quedo el archivo con el registro ya editado.

image107.jpg

TAREAS PROGRAMACION LINUX GCC PROGRAMACION LINUX GCC

CONSTRUIRLES PROGRAMAS DE EDICION O MODIFICACION A LOS ARCHIVOS YA CONSTRUIDOS.

Politica de Privacidad