En este proceso se pretende crear un archivo secuencial en disco e insertarle unos cuantos registros.
Prog27.php
<HTML>
<FORM ACTION=prog27.php METHOD=post>
CLAVE:<INPUT TYPE=text NAME=CLAVE><BR>
NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR>
EDAD:<INPUT TYPE=text NAME=EDAD><BR>
ESTATURA:<INPUT TYPE=text NAME=ESTATURA><BR>
<INPUT TYPE=submit NAME=OK VALUE="insertar"><BR>
</FORM></HTML>
<?php
if ($OK == "insertar") {
// creando y abriendo archivo
$archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo");
// empacando los campos del registro
// recordar que la clave debe empezar en 0
// recordar crear y poner en 'A' campo de status ver bajas en unidad anterior
$bandera="A";
$registro =pack("IA30idA1",$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera);
// grabando el registro
fwrite($archivo,$registro,strlen($registro));
//cerrando archivo
fclose($archivo);
//avisando
echo "registro # ".$CLAVE." insertado"."<br>";
};
?>
Corrida:
notas:
La primera observacion es que se esta usando el fopen en modo “a+”.
Se esta agregando un campo $bandera=“A” para resolver el problema de bajas, reestudiar el tema de bajas en la unidad anterior de archivos secuenciales.
Recordar que las claves del registro deben coincidir con el numero de renglon del archivo, asi que la serie de claves en archivos random o directos es 0,1,2,3,4,,,n
La instrucion de grabacion es:
Se debera empacar el registro con la instruccion pack(), recordar que esto se hace para que el registro quede con un tamano fijo, que es uno de los requisitos que debe tener un archivo directo o random.
Se empaco con la instruccion:
$registro =pack(“IA30idA1”,$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera);
observar que cada campo debe llevar su propio marcador de empaquetado, por el ejemplo el marcador para enteros es I, el de float es D, el de string es A(tamanostring), desgraciadamente php exige que no lleven espacios en blanco dentro de la primera string de pack(), es por esa razon que se ve una string muy rara, pero revisen cada tipo de variable y observaran que cada una tiene su correspondiente marcador dentro de la primera string de pack().
Los marcadores de pack() mas comunes son:
A –> empaca strings y rellena con espacios en blanco indicados
I –> empaca unsigned int y usa 4 bytes de almacenamiento
i –> empaca signed int y usa 4 bytes de almacenamiento
C –> empaca unsigned char y usa ? bytes de almacenamiento
l –> empaca signed long y usa 4 bytes de almacenamiento
L –> empaca unsigned long y usa 4 bytes de almacenamiento
f –> empaca float y usa 4 bytes de almacenamiento ( no usar es mejor usar D)
D –> empaca double y usa 8 bytes de almacenamiento
Se esta grabando con isntruccion:
fwrite($archivo,$registro,strlen($registro));
Fwrite ocupa tres parametros:
1.- el archivo a grabar
2.- el registro a grabar
3.- el tamano del registro: Aqui se esta determinando el tamano del registro con strlen($registro) en lugar de sizeof(registro) como se hace en C, porque pack esta regresando una string binaria.
No olvidar cerrar el archivo con:
Fclose($archivo);
TAREAS PROGRAMACION PHP :
Construir unos cuantos archivos de datos y cargarlos con este programa.
Fuente:enlace
No hay comentarios:
Publicar un comentario