En este capítulo se hace una descripción de como hacer transferencias de datos usando el modelo de Archivos Planos, para aquellas aplicaciones que necesiten su procesamiento.
En este artículo se aborda la posibilidad de usar archivos planos para almacenamiento de datos, lo que sinceramente no pensamos que sea muy apropiado desde un punto de vista práctico. Incluso actualmente, si existiera algún problema por el que no puedas usar una base de datos, PHP incorpora de casa SQLite, que es una base de datos con acceso SQL que funciona en un archivo plano, que sería mucho más recomendable de implementar para una aplicación web.
Por esos motivos vamos a retirar este artículo del taller de PHP y colocarlo como técnicas obsoletas, no tanto porque sea obsoleto, que no lo hemos revisado realmente, sino porque no lo consideramos recomendable.
Los Archivos Planos parecen olvidados desde hace tiempo, aunque en muchas instalaciones se siguen usando y se tienen que convertir para otras aplicaciones, p.e. una Base de Datos, para poder obtener resultados aceptables. Esta operación altera la estructura de los datos quedando fuera de nuestro alcance a no ser volvamos a hacer una conversión después de haberlos manipulado.
Para evitar estos trasvases y sin abandonar la estructura de nuestros Archivos Planos, tenemos un planteamiento que no es nuevo y es digno de tener en cuenta, se trata de conservar la estructura de los datos y montar aislados de ellos los recursos para su explotación, de esta forma conservamos la información en su formato original, y podemos acceder a ella sin depender de ningún software en concreto, es más, podemos hacer nuestros propios programas porque seguimos teniendo acceso a nuestros datos.
Cabe preguntarse si merece la pena invertir tiempo en este tema sobre todo aquellas instalaciones que entregan sus datos en Archivos Planos, p.e. al hacer Pedidos a un Proveedor que para la entrada a su sistema con mySQL o similar exige en el trasiego de datos un determinada estructura de Archivos Planos, con lo que tendremos que transformar nuestros datos para enviar Pedidos y otra vez pero a la inversa cuando recibimos Albaranes y Facturas del Proveedor en cuestión. Sería cómodo trabajar directamente con los Archivos Planos p.e. con una Aplicación que nos permitiese tener la Gestión de nuestros Clientes y a la vez comunicarnos sin ningún problema con nuestro Proveedor, teniendo un control sobre nuestros datos y software sin tanta diversidad de Herramientas.
La idea no es difícil de llevar a la práctica, podemos empezar creando una tabla que haga de MAPA para el manejo de Archivos con su Nombre, Campos, longitud y características, para lo que necesitamos unos programillas para mantenerla y unas funciones para manejar los Archivos según estas especificaciones, funciones que usaremos para reducir considerablemente nuestro programas evitando errores y tiempo de depuración.
Ahora necesitaremos presentar estos Archivos en la Web, para lo que ampliamos nuestro MAPA incluyendo Rejillas de presentación indicando su nombre y el del Archivo que vamos a ver con sus Campos y algún parámetro más, en base a esto haremos otra serie de funciones para explotar esta estructura, y siguiendo, podemos diseñar la presentación de Formularios de forma que invocando su nombre y número de registro podamos ver y modificar en pantalla los datos que queramos.
Con esto, disponemos de un artilugio que nos facilita la programación, pero nos queda algo tan importante como es el manejo en si de los datos, esto es, su ordenación y selección. Para esto echamos mano de ISAM estableciendo los Indices que necesitemos para nuestros Archivos Planos aislados de ellos en un Archivo aparte. El manejo de datos con ISAM es cómodo y rápido, y como el programa de ISAM lo hemos hecho a nuestro medida, tendrá además de los clásicos comandos de Búsqueda, Inserción, Eliminación, etc. otros más acordes a nuestras necesidades como la Selección de listas que nos devuelve los registros que cumplan determinadas condiciones, p.e. que tengan una parte inicial de la Clave igual al argumento de búsqueda como en las líneas de un Pedido que llevarán todas el Número de Pedido al que pertenecen.
Está claro que este trabajo PHPisam no aporta una Base de datos, pero las pestaciones obtenidas permiten trabajar con una soltura parecida, además el enfoque principal es la presentación de datos en la Web permitiendo la selección de datos y el envío a la Web en Formularios de ficha y Rejillas de líneas de registros usando las funciones pertinentes, con lo que podemos hacer programas muy pequeños y de bastante utilidad como mi propìo sitio desarrollado con esta herramienta, donde e-comerce y su Administrador constan de 20 programas y solo 2 exceden de 40 líneas de código.
PHPisam para web
El manejo de los Archivos Planos (anteriormente descritos en el anterior artículo) en proyectos de cierta envergadura es un trabajo complejo y no permite un acceso rápido en Archivos con gran cantidad de registros, pero usando ISAM podemos solucionar este problema con una simple línea en nuestro programa para manipular el Archivo .INX que es donde se alojan los Indices del Archivo en cuestión, de esta forma podemos seguir usando nuestros Archivos Planos sin problemas, al tener aislada en el Archivo aparte .INX la maquinaria necesaria para el acceso a datos.
En todas las aplicaciones un elemento fundamental son las listas de registros como Catálogos, Pedidos de un Cliente, Material enviado en una fecha, etc., por lo que disponemos de Comandos con este enfoque, como Registros a partir de una Clave o entre dos Claves determinadas, o aquellos en que la parte izquierda de la Clave sea igual al valor indicado, además también podemos combinar los casos anteriores entre sí.
Estos Comandos devuelven a nuestro programa una lista en la que figuran todos los registros en el orden establecido en el Indice y que cumplen las condiciones solicitadas. Como la lista puede ser muy larga se hahilitan dos parámetros para recibir solo un número de registros a partir de una posición, esto nos permite recorrer un gran Archivo y traer solamente las líneas de datos que componen la Página vamos a presentar.
En nuestro programa solo tendremos que hacer una lectura en disco por cada número de registro de la lista devuelta por el programa de ISAM, números que vienen separados con coma por lo que resulta muy fácil, veamos un ejemplo para PHP:
$nConsu = $cabecera; // Obtener el Número de Consulta.
$Longi = 300; // Longitud registro de Respuestas
$nLineas = 20; // Indica 20 líneas por Página.
$inicio += $nLineas; // Avance de Página.
$resul = exec("serafoX l/Respuestas/0/".$nConsu."/".$inicio."/".$nLineas."\");
$totRegis = strtok( $resul, "/");
echo "Total registros encontrados:".$totRegis;
$nuReg = strtok( $resul, ",");
while($nuReg){
fseek( $fich, $nuReg*$Longi );
$Buf = fread( $fich, $Longi );
SEPARACION EN CAMPOS DEL REGISTRO $Buf LEIDO
Y CREACION DE HTML PARA PRESENTAR LA LINEA
$nuReg = strtok( $resul, ",");
}
La primer línea supone que hemos leido una Consulta y tenemos su número que es $nConsu.
Hemos utilizado el Comando l/Respuestas/etc. que nos devuelve una string con un número que es el total de registros encontrados y un / slash de separación seguido de los números de Registro a presentar separados por coma, los cuales vamos seleccionando con strtok, leyendo y presentando en el subsiguiente bucle while.
Por supuesto también se dispone de los Comandos clásicos como la Creación del Archivo de Indices, Inserción de una Clave, Eliminar, Buscar una sola Clave, Primera, Siguiente, Anterior, Ultima.
Aprovechando la operativa descrita, se habilita la posibilidad de ejecutar varios Comandos en una sola llamada al programa de ISAM, para casos como en las modificaciones de Claves donde usaremos primero el de Eliminar todas las Claves del registro y a continuación el de Insertar los nuevos valores, otro caso, y este el más interesante, nos permite seleccionar varios Indices del mismo Archivo y obtener una lista con los que cumplen todas las condiciones, y con del orden de clasificación de cualquiera de los Indices implicados, p.e. todos los registros del mismo Cliente comprendidos entre dos Fechas, para lo que usaremos un Comando g/ARCHIVO/2/cliente para seleccionar los del Cliente, y otro con k/ARCHIVO/3/fch1/fch2 para Limitar las Fechas. Hemos supuesto el Indice=2 para Cliente y el Indice=3 para Fecha.
Para obtener estos resultados se hace una sola llamada a ISAM con los Comandos seguidos y separados por chr(198) el caracter ASCII Æ = 198. En el caso de listas es obligatorio un número que indica cuál de ellas impone el orden en la lista resultante, en caso contrario no se realiza el cruce de los diferentes Indices. e/ARCHIVO/etc.Æh/ARCHIVO/etc. para el primer ejemplo y g/ARCHIVO/2/clienteÆ0k/ARCHIVO/3/fch1/fch2 para el segundo, donde el cero que acompaña al separador indica que el orden de los datos resultante será el del comando cero, o sea el Indice 2, y si deseamos orden por Fecha que es el Indice 3 pondremos un 1 con el separador.
Serafin Vazquez