Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Se tiene un archivo de acceso aleatorio conteniendo los datos de un grupo de personas, el mismo
- almacena la información según el siguiente formato:
- typedef struct{
- char nya[30];
- int edad;
- float alt;
- } tficha;
- Implemente una aplicación que permita generar un archivo de texto conteniendo todos los datos de
- aquellas personas mayores de 18 años.
- Nota: El archivo de texto deberá contener, por renglón, los datos de las personas separados por “;”.
- Luego implemente una aplicación que, a partir de un archivo de texto como el creado en el punto 3,
- genere un archivo de acceso aleatorio cuyos datos se encuentren ordenados alfabéticamente. El
- archivo de texto es un argumento de la línea de órdenes.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define CR 8
- typedef struct{
- char nya[30];
- int edad;
- float alt;
- } Tficha;
- int compnyaficha (Tficha f1, Tficha f2);
- void ordenavector(int tamanio , Tficha *vect, int (*funcomp)(Tficha,Tficha));
- void ordenaArch(FILE *arch , int (*funcomp)( Tficha , Tficha));
- int main(int argc, char *argv[])
- {
- FILE *archivobin;
- FILE *archivobinord;
- FILE *archtxt;
- char nyap[30];
- int i,eda;
- float altu;
- Tficha reg1, regaux;
- char nomarch[250];
- char linea[100];
- char *aux;
- long cantreg;
- if (argc > 0)
- {printf ("Argumentos recibidos %d \n", argc);
- for (i=0 ;i<argc ; i++)
- {
- printf ("ARG %d : %s \n",i, argv[i]);
- }
- }
- if (argc>1)
- strcpy(nomarch,argv[1]);
- else
- strcpy(nomarch,"Mayores.txt");
- // Lectura
- archtxt = fopen (nomarch, "rt");
- if (!archtxt)
- {printf ("ERROR No se pudo abrir el archivo : %s\n\n",nomarch);
- exit -1;
- }
- archivobin = fopen ("NOrdenado.dat", "wb+");
- if (!archivobin)
- {printf ("No se pudo abrir el archivo NOrdenado.dat \n");
- exit -1;}
- else
- {
- printf("\nLectura del archivo : %s\n", nomarch);
- printf (" Nombre Edad Altura \n");
- while ( ! feof(archtxt))
- { if ( fscanf (archtxt,"%100s",linea ) > 0)
- { if (strlen(linea)>4)
- {
- aux = strtok(linea,";");
- strcpy(reg1.nya,aux);
- aux= strtok(NULL,";");
- reg1.edad = atoi(aux);
- aux= strtok(NULL,";");
- reg1.alt = atof(aux);
- // sscanf (aux,"%f",®1.alt);
- printf( " Datos : %30s %6d %8.2f \n" , reg1.nya , reg1.edad , reg1.alt);
- fwrite(®1,sizeof(Tficha),1,archivobin);
- }
- }
- strcpy(linea,"");
- }
- fseek(archivobin,0,SEEK_END);
- cantreg = ftell(archivobin)/sizeof(Tficha);
- printf ("Registros encontrados : %d", cantreg);
- fseek(archivobin,0,SEEK_SET);
- Tficha vector[cantreg]; // Declaro vector
- // fread (vector, sizeof(Tficha),cantreg,archivobin);
- i=0;
- while (! feof(archivobin))
- {if ( fread(&vector[i], sizeof(Tficha),1,archivobin )== 1 )
- i++;
- }
- ordenavector (cantreg,vector,compnyaficha);
- archivobinord = fopen ("Ordenado.dat", "wb+");
- if (!archivobinord)
- {printf ("No se pudo abrir el archivo Ordenado.dat \n");
- exit -1;}
- else
- {
- printf("\n\n\t\t DATOS ORDENADOS \n\n");
- fseek(archivobinord,0,SEEK_SET);
- for (i=0 ; i< cantreg ; i++)
- {
- fwrite(&vector[i],sizeof(Tficha),1,archivobinord);
- printf( " Datos %d: %30s %6d %8.2f \n" ,i, vector[i].nya , vector[i].edad , vector[i].alt);
- }
- fclose (archivobinord);
- }
- printf ("Archivo no ordenado ..... \n");
- fseek(archivobin,0,SEEK_SET);
- while (! feof(archivobin))
- { if ( fread(®aux, sizeof(Tficha),1,archivobin )== 1 )
- printf( " Datos: %30s %6d %8.2f \n" , regaux.nya , regaux.edad , regaux.alt);
- }
- printf ("\nOrdenando en archivo ..... \n");
- ordenaArch(archivobin , compnyaficha );
- fseek(archivobin,0,SEEK_SET);
- printf ("Resultado Ordenar en archivo \n");
- while (! feof(archivobin))
- { if ( fread(®aux, sizeof(Tficha),1,archivobin )== 1 )
- printf( " Datos: %30s %6d %8.2f \n" , regaux.nya , regaux.edad , regaux.alt);
- }
- fclose (archivobin);
- }
- printf ("\n\nFinalizado\n\n");
- system("PAUSE");
- return 0;
- }
- int compnyaficha (Tficha f1, Tficha f2)
- {
- return strcmp(f1.nya,f2.nya) ;
- }
- void ordenavector(int tamanio , Tficha *vect, int (*funcomp)( Tficha , Tficha))
- {
- Tficha aux;
- int i , j;
- for (i=0 ; i<tamanio-1; i++)
- for (j=i+1;j<tamanio; j++)
- if ( funcomp (vect[i],vect[j])> 0 )
- { // printf ("Intercambia %d-%s por %d-%s ",i,vect[i].nya, j, vect[j].nya);
- aux= vect[i];
- vect[i]=vect[j];
- vect[j]=aux;
- }
- }
- void ordenaArch(FILE *arch , int (*funcomp)( Tficha , Tficha))
- {
- int i , j;
- Tficha reg1,reg2;
- int tamreg, cantreg;
- tamreg = sizeof(Tficha);
- fseek(arch,0,SEEK_END);
- cantreg =ftell(arch)/tamreg;
- for (i=0 ; i<cantreg-1; i++)
- { fseek(arch,i*tamreg,SEEK_SET);
- fread(®1,tamreg,1,arch);
- for (j=i+1;j<cantreg; j++)
- { fseek(arch,j*tamreg,SEEK_SET);
- fread(®2,tamreg,1,arch);
- if ( funcomp (reg1,reg2)> 0 )
- { fseek(arch,i*tamreg,SEEK_SET);
- fwrite(®2,tamreg,1,arch);
- fseek(arch,j*tamreg,SEEK_SET);
- fwrite(®1,tamreg,1,arch);
- // printf ("Intercambia %d-%s por %d-%s ",i,reg1.nya, j, reg2.nya);
- reg1=reg2;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement