Ok, creo que "entendí" lo que quieres, aunque realmente soluciones así existen muchas, y para diferentes niveles... pero dices que apenas vas comenzando y supongo que por lo que muestras, la interfaz que quieres es algo estructurado por funciones "independientes", así que mis comentarios los haré utilizando dicho esquema:
danimera escribiste:makefile(“fichero.dat”, @campos) # Crea un fichero con ese nombre y crea los campos, automáticamente crea el campo ID, asi que no es necesario crearlo, quedan los ficheros creados de la forma ej:
ID||nombre||apellido||pais||edad
01||dagoberto||perez||chile||23
Mi primera recomendación para esta función es: si se llama "makefile", entonces que haga sólo eso... no la pongas a que agregue datos, para eso ya tienes a "swrite", no mezcles las tareas que debe realizar cada función.
Mi segunda recomendación es que retorne "algo" que guarde el estado. ¿A qué me refiero? Mira, en el código que muestras abres (y no siempre cierras, por cierto) el archivo cada vez que vas a realizar una operación, eso pega muy fuerte en el rendimiento de la aplicación, una llamada a open es costosa y más para múltiples llamadas, por lo tanto lo que puedes hacer es simplemente abrirlo una sola vez y dejar almacenado el filehandle en la variable que retorne dicha función, o retornarlo directamente, algo como esto:
Using perl Syntax Highlighting
sub makefile
{
my ($file, @campos) = @_;
open my $fh, ..
#aquí va lo de mi siguiente comentario
return $fh;
}
my $file = makefile
('hola.txt');Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Mi tercera recomendación es que... la función verifique si el archivo existe, si no existe que lo cree, si ya existe que simplemente lo abra para utilizarlo. A su vez, si vas a trabajar con IDs, te recomiendo que el archivo tenga un "encabezado", dónde la primera línea sea el último índice que asignaste, de tal manera que podrás tener controlado el siguiente ID sin importar si ya eliminaste uno. Y eso lo puedes hacer en esta función.
danimera escribiste:swrite(“fichero.dat”,@campos) # Agrega campos auto incrementando el ID, los campos deben estar en orden como se ingreso en el makefile.
Para esta función, tomando en cuenta el código que te puse arriba, pasarías el valor de retorno de makefile como primer argumento, y ya ahora sí, el segundo argumento podrá ser la lista de elementos a insertar.
danimera escribiste:fwrite(“fichero.dat”,%campos) # más poderoso que el swrite, permite insertar registros por un hash, ingresa el valor donde el campo sea igual al nombre de la llave, En caso de que halla campos distintos a los campos del fichero, saldrá una advertencia, de lo contrario devolverá 1.
Esta función la verdad no la entendí mucho, lo siento.
danimera escribiste:fedit(“fichero.dat”,’$id’,%campos_valores) # lo que hace es editar el registro id los valores de los campos dados en el hash %campo_valores, %campos_valores={‘campo1’,’valor1’,’campo2’,’valor2’}; . Si el id indicado no existe se agregará uno nuevo # Esto puede hacer que cambie la consecutividad del id del fichero
Aquí no le veo mucha importancia que uses un hash, ya que en teoría en las funciones anteriores (como "swrite") insertas todo como un array, de tal forma que asumo que tu controlas el orden de los elementos, recuerda que un hash tampoco tiene orden alguno de las llaves. No me parece un buen diseño mezclar interfaces con arreglos y hashes, cuando realmente el orden no está definido.
La funcionalidad que provee fedit está correcta, pero la manera en la que está diseñado no. Apégate a una interfaz definida.
danimera escribiste:cfind($file, $campo, $valor) # busca un registro dentro de $file, donde el $campo sea igual al $valor esta búsqueda quedara dentro de un hash ej: %busqueda = cfind($file, $campo, $valor)
Multifind($file) # Aun no le he implementado es para hacer múltiples búsquedas, podría ser edades mayores a 18 o nacidos en Argentina cosas asi.
Para este par de funciones no tengo muchos comentarios, y más porque supongo comenzarás haciendo una búsqueda secuencial de todos los registros por medio de ese campo.
danimera escribiste:Kread($file,’orden’,’cantidad_registros’) # deja en un array la cantidad de registros que indiquemos en el orden deseado (1=desde el inicio, 0=desde el final)y la cantidad que le digamos también, si no ingresamos cantidad de registros nos devolverá 10 por defecto
Pero estos registros quedan de la forma : 02||juliana||perez||afiliada||1983
El primer campo es el ID
En esta función habrá que tener cuidado. Imagina que tienes 50 elementos, y de pronto jalas 10, luego de procesarlos tienes la necesidad de jalar los siguientes 10, si lo haces como lo tienes implementado, tendrás que jalar los primeros 20 (los 10 que ya habías leído, más los 10 que necesitas), de tal manera que nuevamente el rendimiento de la aplicación se va hacia abajo, sin contar que estarás procesando la misma información una y otra vez.
danimera escribiste:Espero que quede un poquito mas claro, la idea mía es aprender mas, y hacer algo aunque no sea la gran cosa pero algo lo mejor posible, Ya con esta idea lo que deseo es Que me guíen paso a paso y yo iré haciendo los arreglos hasta tener algo estable. OK Thanks
Queda claro lo que quieres hacer, y entiendo la necesidad que tienes, pero lo que yo te recomendaría es planear bien la interfaz de tu proyecto, una interfaz BIEN definida, y que sea amigable para ti por lo pronto, ya que serás tu mismo usuario.
Toma en cuenta mi recomendación del "encabezado" podría ayudarte a definir el orden de los campos por ejemplo, y así poder retornar valores como un hash, en vez de como un arreglo, pero eso lo decidirás tu en tu interfaz, piensa qué es lo que sería mas fácil para ti.
Hay muchas más recomendaciones, incluso de módulos que pueden ayudarte, pero también asumo que lo quieres hacer sin la ayuda de módulos, así que personalmente lo que yo exhorto que hagas es que plantees de nuevo el diseño, con los puntos que te hice arriba.
Saludos,