Foros de daboweb

MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: beginner en 16 de Diciembre de 2004, 09:40:31 am

Título: comparar dos ficheros
Publicado por: beginner en 16 de Diciembre de 2004, 09:40:31 am
Mu buenas... Tengo un programa para comparar dos ficheros, uno de pedidos y otro de lo que hay disponible en el almacén, pero no funciona.  :( Me parece que sólo está haciendo correr uno de los ficheros, pero no sé cómo solucionarlo. ¿Alguien tiene una sugerencia?

#include<stdio.h>
#include<conio.h>
#include<values.h>
#include<stdlib.h>
#include<ctype.h>
void proceso(void);
void leer_almacen(void);
void leer_pedidos(void);
void encontrado(void);
void error(void);
FILE *alma, *ped;
struct
 {
 long cod_ar;
 char deno[30];
 float pv;
 short exis;
 }reg_alma;

struct
 {
 long cod_ar;
 short uni;
 long cod_cli;
 }reg_ped;

 short er;

void main(void)
{
alma=fopen("c:\\almacen.dat", "r");
if (alma!=NULL)
 {
 ped=fopen ("c:\\pedidos.dat","r");
 if (ped!=NULL)
  {
  proceso();
  fcloseall();
  }
 else
  {
  clrscr();
  printf("\n\tError de apertura en pedidos");
  printf("\n\tEste programa se cancelara");
  printf("\n\tPulse cualquier tecla para terminar");
  fflush(stdin);
  getch();
  fclose (alma);
  }
 }
else
 {
 clrscr();
  printf("\n\tError de apertura en almacen");
  printf("\n\tEste programa se cancelara");
  printf("\n\tPulse cualquier tecla para terminar");
  fflush(stdin);
  getch();
 }
clrscr();
}
             
               //EN ESTA FUNCION PIENSO QUE ESTA EL PROBLEMA:

void proceso(void)
{
leer_almacen();
leer_pedidos();
while (feof(ped)==0)
 {
 if (reg_ped.cod_ar>reg_alma.cod_ar)
  {
  leer_almacen();
  if (feof(alma)!=0)
  reg_alma.cod_ar=MAXLONG;
  }
 else
  {
  if (reg_ped.cod_ar==reg_alma.cod_ar)
  encontrado();
  else
  error();
  leer_pedidos();
  }
 }

}

void leer_almacen(void)
{
er=fread(&reg_alma, sizeof(reg_alma), 1, alma);
if(er!=1&&feof(alma)==0)
 {
 clrscr();
 printf("\n\tError de lectura en almacen");
 printf("\n\tPrograma cancelado");
 printf("\n\tPulse cualquier tecla para salir");
 fflush(stdin);
 getch();
 clrscr();
 exit(1);
 }
}

void leer_pedidos(void)
{
er=fread(&reg_ped, sizeof(reg_ped), 1, ped);
if (er!=1&&feof(ped)==0)
 {
 clrscr();
 printf("\n\tError de lectura en pedidos");
 printf("\n\tPrograma cancelado");
 printf("\n\tPulse cualquier tecla para salir");
 fflush(stdin);
 getch();
 clrscr();
 exit(1);
 }
}

void encontrado(void)
{
clrscr();
gotoxy (26,3);
printf("Proceso de atencion de pedidos");
if (reg_ped.uni>reg_alma.exis)
printf("Pedido no atendido - articulo: %ld, unidades: %ld, existencias: %d, cliente %ld", reg_alma.cod_ar, reg_ped.uni, reg_alma.exis, reg_ped.cod_cli);
else
printf("Pedido atendido - articulo: %ld, unidades: %ld, cliente %ld", reg_ped.cod_ar, reg_ped.uni, reg_ped.cod_cli);
fflush(stdin);
getch();
}

void error(void)
{
clrscr();
gotoxy (26,3);
printf("Proceso de atencion de pedidos");
printf("\n\n\tCodigo de articulo %ld no existe en almacen", reg_ped.cod_ar);
printf("\n\n\tPulse cualquier tecla para salir");
fflush(stdin);
getch();
exit(1);
}
Título: comparar dos ficheros
Publicado por: Leandros en 16 de Diciembre de 2004, 10:54:46 am
Lo imprimiré y me lo miro tranquilamente.

Saludetes.

PD:Joee que ganas tengo de tener mi portatil de nuevo  :cry:
Título: comparar dos ficheros
Publicado por: destroyer en 16 de Diciembre de 2004, 01:20:25 pm
Hola:
 Bienvenido al foro beginner...

A ver que te comentan..

un saludo
Título: comparar dos ficheros
Publicado por: jirho en 04 de Enero de 2005, 04:27:57 pm
...bueno, creo que muy tarde, pero para la duda...en primer lugar creo te estas complicando mucho...en segundo, no veo como comparas las cadewnas de los pedidos...lo mejor seria leer el pedido  e ir comparandolo con el cada articulo del almacen...veo que es un archivo binario...lomejor seria que trabajaras con archivos de texto...saludos...