[ Foro de Pascal ]
Necesito un poquito de ayuda con un procedimiento.
Os pongo en antecedentes:
1.- Tengo tres archivos binarios llamados (cesta 1, cesta 2 y cesta 3)
2.- Cada archivo contiene los datos de un array [0..TAMMAXCESTA]
3.- Cada posición del array (salvo la pos.0) contiene los datos de un registro cuyos campos son (nombre, precio unidad, unidades solicitadas y en_cesta).
4.- La posición '0' del array solo es utilizada cuando finalizamos el proceso de compra (es decir, una vez que elegimos la opción del menú de 'Finalizar compra' el campo 'en_cesta' de la posición '0' se pone en 'TRUE' y ya no podemos operar con dicha cesta de la compra)
5.- Además de los ficheros binario, tengo tb un fichero de texto llamado 'Indice.txt' que almacena, linea a linea, los nombres de las cestas que voy guardando.
Pues bien, de las tres cestas que yo tengo almacenadas, 'cesta 2' y 'cesta 3' tienen el campo 'micesta[0].en_cesta = TRUE'.
El enunciado de el ejercicio con el que estoy teniendo problemas es el siguiente:
Crea un procedimiento de nombre 'Estadisticas_Producto', que muestre por pantalla las unidades totales de un producto (cuyo nombre pasamos como parámetro) que se encuentran en los pedidos ya finalizados y pendientes de entrega (Es decir, de aquellas cestas cuya posición '0' del campo 'en_cesta' sea igual a TRUE. Debo hacerlo utilizando el archivo 'indice.txt'.
Esto es lo que yo he hecho:
Procedure Estadisticas_producto (micesta: cesta; N_FICHERO, N_Producto: string);
var
fichero: Tfichero;
fichero2: text;
linea: string;
i, unidades: integer;
Begin
i:= -1;
unidades:= 0;
Assign (fichero2, N_FICHERO);
reset (fichero2);
repeat
readln (fichero2, linea);
Assign (fichero, linea);
reset (fichero);
while (not eof (fichero)) and (i< TAMMAXCESTA) do
i:=i+1;
read (fichero, micesta[i]);
If (micesta[0].en_cesta = true) and (micesta[i].nombre= N_Producto) then
begin
unidades := unidades + micesta[i].unidades;
end;
close (fichero);
Until eof (fichero2);
close (fichero2);
Writeln;
writeln ('Hay: ', unidades, ' unidades de ', N_Producto, ' en los pedidos finalizados');
writeln ('Pulse una tecla para continuar');
readln;
end;
Al ejecutar el programa me encuentro con que si el primer nombre que aparece en el archivo 'indice.txt' se corresponde con un fichero cuya cesta no ha sido finalizada, el programa no me cuenta las unidades del producto seleccionado. Pero si elimino dicho archivo, entonces si me da el total. En el caso que expongo como 'cesta 1' no está finalizada el resultado que me da es que hay '0' unidades de, por ejemplo, 'pan', aunque en los otros dos archivos (si finaliados) haya un total de 5 unidades. Sin embargo, si elimino esta cesta (cesta 1), entonces si me muestra las 5 unidades que hay.
Por favor, necesito que me deis una pista de donde he podido equivocarme.
Mil gracias.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)