[ Foro de C# ]

Archivos binarios con estructuras - Condicional/Principiante

21-Dec-2014 16:27
Invitado (Gaby)
2 Respuestas

Hola! Buenos dias,

Tengo un ejercicio de la facultad que me pide lo siguiente:
"En un archivo llamado Stock se encuentran 36 sucursales y un maximo de 700 productos por cada una. Se debe plantear una logica para que permita procesar los datos de una sola de las sucursales.
Del archivo seleccionar todos los productos que estan en la sucursal ingresada por teclado y reservarlos en memoria, utilizando una adecuada estructura de datos. El diseño del registro es:
- Codigo de sucursal
- Numero de producto
-Nombre de producto
-Saldo existente"

Logica propuesta:
Lo que estuve pensando fue filtrar en la lectura del archivo por la sucursal que estoy ingresando pero no lo esta haciendo correctamente.
Otra idea que se me habia ocurrido era copiar toda la informacion del archivo en un array de estructuras y luego filtrarlo y copiarlo en un array auxiliar del mismo formato.
Tiene sentido? Conocen alguna forma mas optima de filtrar la informacion de un archivo y copiarla en una estructura?

Les dejo el codigo que estuve intentando, agradeceria mucho si me podrian ayudar con este ejercicio :)


void main()
{
    struct s st[700];
    printf("Ingrese numero de sucursal: ");
    scanf("%d",&n_suc);
    FILE*archi;
    if((archi=fopen("stock.dat","rb"))==NULL)
    {
        printf("Error al abrir el archivo");
        exit(0);
    }
    i=0;
    fread(&st[i],sizeof(struct s),1,archi);
    while(!feof(archi) && st[i].cod==n_suc)
        {
        i++;
          fread(&st[i],sizeof(struct s),1,archi);
        }
         cant=i;
    fclose(archi);
}




21-Dec-2014 18:01
Nacho Cabanes (+84)

En primer lugar, tu pregunta está en el foro incorrecto: no es de C# sino de C. Luego la moveré al foro correcto.

En segundo lugar, faltan detalles sobre el struct porque imagino que tu array es incorrecto: permite un máximo de 700 productos, y deberían ser 700 x 36, posiblemente en un array bidimensional.

Aun así, se puede hacer como lo estas haciendo, con una búsqueda secuencial,  o bien saltar a los datos de una sucursal con fseek, si los datos de cada struct son de tamaño fijo y están dentro de un array bidimensional.


21-Dec-2014 21:29
Invitado (Gaby)

Muchas gracias,

Es correcto lo que decis, el enunciado me dice que hay 36 sucursales y un maximo de 700 productos para cada uno, no me especifica como esta confeccionado el archivo, solo que debo seleccionar una unica sucursal y todos sus productos.

Voy a intentar generar el array bidimensional y utilizar fseek porque como lo propuse arriba no me esta funcionando.

Saludos,
Gaby






(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.)