Archivos

30
Manejo de archivos en lenguaje C Programaci´ on estructurada Archivos Oscar Alvarado Nava [email protected] Departamento de Electr´ onica Divisi´on de Ciencias B´ asicas e Ingenier´ ıa Universidad Aut´onoma Metropolitana, Unidad Azcapotzalco 13O, noviembre de 2013 Oscar Alvarado Nava UAM Azcapotzalco Archivos 1/30

description

Archivos

Transcript of Archivos

  • Manejo de archivos en lenguaje C

    Programacion estructuradaArchivos

    Oscar Alvarado Nava

    [email protected]

    Departamento de ElectronicaDivision de Ciencias Basicas e Ingeniera

    Universidad Autonoma Metropolitana, Unidad Azcapotzalco

    13O, noviembre de 2013

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 1/30

  • Manejo de archivos en lenguaje C

    Contenido

    1 Manejo de archivos en lenguaje CArchivos de caracteres

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 2/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Funciones buffereadas comunes

    Nombre Funcion

    fopen() Abre un archivofclose() Cierra un archivoputc() Escribe un caracter en el archivofputc()

    getc() Lee un caracter en el archivofgetc()

    fseek() Busca un bytes en especficofprintf() Lo mismo que printf pero a un archivofscanf() Lo mismo que scanf pero a un archivofeof() Regresa verdadero cuando llega al final del archivoferror() Regresa verdadero cuando se ha generado un errorrewind() Regresa el apuntador a la posicion inicialremove() Elimina archivofflush() Limpia el flujofread() Lee tipos de datos multi-bytefwrite() Escribe tipos de datos multi-byte

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 3/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Archivo de texto datos.dat

    1 Programacion estructurada2 Trimestre 13-Otono3 Oscar Alvarado Nava

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 4/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Volcado del archivo datos.dat

    < tss-1-01@ce >< /users/tss/1/tss-1-01 >$ cat datos.dat

    < tss-1-01@ce >< /users/tss/1/tss-1-01 >$ od -x datos.dat

    < tss-1-01@ce >< /users/tss/1/tss-1-01 >$ od -x datos.dat

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 5/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee caracteresEOF.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee caracter a caracter hasta encontrar el EOF*/3 #include 45 int main()6 {7 FILE *fd;8 char caracter;9 int i;

    1011 fd = fopen("datos.dat","r");12 if(fd == NULL )13 {14 printf("error al abrir el archivo\n");15 return 0;16 }17 i=0;18 while( (caracter = fgetc(fd)) != EOF )19 {20 printf(" %c ",caracter);21 i++;22 }23 printf("\n\nSe leyeron %d caracteres\n",i);2425 fclose(fd);2627 return 0;28 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 6/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee linea.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee caracter a caracter hasta encontrar el primer \n */3 #include 45 int main()6 {7 FILE *fd;8 char caracter;9 int i;

    1011 fd = fopen("datos.dat","r");12 if(fd == NULL )13 {14 printf("error al abrir el archivo\n");15 return 0;16 }17 i=0;18 while( (caracter = fgetc(fd)) != \n )19 {20 printf(" %c ",caracter);21 i++;22 }23 printf("\n\nSe leyeron %d caracteres\n",i);2425 fclose(fd);2627 return 0;28 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 7/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabra.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee caracter a caracter hasta encontrar el primer espacio */3 #include 45 int main()6 {7 FILE *fd;8 char caracter;9 int i;

    1011 fd = fopen("datos.dat","r");12 if(fd == NULL )13 {14 printf("error al abrir el archivo\n");15 return 0;16 }17 i=0;18 while( (caracter = fgetc(fd)) != )19 {20 printf(" %c ",caracter);21 i++;22 }23 printf("\n\nSe leyeron %d caracteres\n",i);2425 fclose(fd);2627 return 0;28 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 8/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabras a cadenas.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Crea cadenas: lee caracter a caracter hasta encontrar el3 primer espacio o nueva linea , agrega el nulo y continua hasta el EOF*/4 #include 56 int main()7 {8 FILE *fd;9 char cadenas [20][50]; //20 de cadenas de maximo 49 caracteres

    10 char caracter;11 int i,ncadenas;1213 fd = fopen("datos.dat","r");14 if(fd == NULL )15 {16 printf("error al abrir el archivo\n");17 return -1;18 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 9/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabras a cadenas.c (2/2)

    19 i=0;20 ncadenas =0;21 while( (caracter = fgetc(fd)) != EOF )22 {23 if(caracter != && caracter != \n)24 {25 cadenas[ncadenas ][i] = caracter;26 i++;27 }28 else if (i != 0)29 {30 cadenas[ncadenas ][i]=\0;31 ncadenas ++;32 i=0;33 }34 }35 fclose(fd);3637 printf("\n\nSe leyeron %d cadenas\n",ncadenas);38 for(i=0;i

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabra2.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee la primera palabra de un archivo con funcion de biblioteca3 */4 #include 5 #define MAX 5067 int main()8 {9 FILE *fd;

    10 char palabra[MAX];1112 fd = fopen("datos.dat","r");13 if(fd == NULL )14 {15 printf("error al abrir el archivo\n");16 return 0;17 }1819 fscanf(fd," %s",palabra);20 printf("palabra leido: \" %s\"\n",palabra);2122 fclose(fd);2324 return 0;25 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 11/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabras.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee el contenido de un archivo por palabras3 */4 #include 5 #define MAX 5067 int main()8 {9 FILE *fd;

    10 char palabra[MAX];1112 fd = fopen("datos.dat","r");13 if(fd == NULL )14 {15 printf("error al abrir el archivo\n");16 return 0;17 }1819 while( fscanf(fd," %s",palabra) != EOF )20 printf("palabra leida: \" %s\"\n",palabra);2122 fclose(fd);23 return 0;24 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 12/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee palabras arg.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee el contenido de un archivo por palabras */3 #include 4 #define MAX 505 // ejecutar asi: ./ lee_palabras_arg datos.dat6 int main(int argc , char *argv [])7 {8 FILE *fd;9 char palabra[MAX];

    1011 if(argc != 2 )12 {13 printf("uso: %s \n",argv [0]);14 return -1;15 }16 fd = fopen(argv[1],"r");17 if(fd == NULL )18 {19 printf("error al abrir el archivo\n");20 return -1;21 }22 while( fscanf(fd," %s",palabra) != EOF )23 printf("palabra leida: \" %s\"\n",palabra);2425 fclose(fd);26 return 0;27 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 13/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee linea.c

    1 /* Programacion estructurada 13O, Oscar Alvarado Nava2 Lee una linea de palabras hasta el caracter \n*/3 #include 4 #include //para strlen5 #define MAX 10067 int main()8 {9 FILE *fd;

    10 char linea[MAX];11 int nchars;1213 fd = fopen("datos.dat","r");14 if(fd == NULL )15 {16 printf("error al abrir el archivo\n");17 return 0;18 }19 fgets(linea , MAX , fd);20 nchars= strlen(linea);21 linea[nchars -2]=\0; // elimina \r y \n22 printf("linea leida: \" %s\"\n",linea);2324 fclose(fd);25 return 0;26 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 14/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Archivo de texto datos2.dat

    1 52 1 1.03 2 2.24 3 3.15 4 4.56 5 5.1

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 15/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee numeros.c

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee palabras y los convierte a enteros y flotantes */3 #include 4 int main()5 {6 FILE *fd;7 int i,ndatos;8 int entero;9 float flotante;

    1011 fd = fopen("datos2.dat","r");12 if(fd == NULL )13 {14 printf("error al abrir el archivo\n");15 return 0;16 }17 fscanf(fd," %d",&ndatos);18 printf("Se leeran %d pares de datos\n",ndatos);19 for(i=0; i

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Datos de personas datos3.dat

    1 102 Benjamin 34 90.53 Humberto 33 75.34 Juan 35 80.75 Miguel 39 70.36 Francisco 42 80.07 Gerardo 41 110.58 Alex 36 101.39 Omar 41 90.1

    10 Ricardo 45 110.511 Fernando 28 70.5

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 17/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee personas.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee palabras y los convierte a cadenas , enteros y flotantes */34 #include 56 /* maximo 20 lugares para almacenar datos en memoria */7 #define MAX 2089 int main()

    10 {11 FILE *fd;12 int i,ndatos;13 char nombres[MAX ][20]; //MAX cadenas de maximo 19 caracteres y nulo14 int edades[MAX];15 float pesos[MAX];1617 fd = fopen("datos3.dat","r");18 if(fd == NULL )19 {20 printf("error al abrir el archivo\n");21 return 0;22 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 18/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    lee personas.c (2/2)

    23 fscanf(fd," %d",&ndatos);24 printf("Se leeran %d datos de personas\n",ndatos);25 for(i=0; i

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    escribe personas.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Solicita cadenas , enteros y flotantes y los almacena como3 caracteres en un archivo */4 #include 5 /* maxima longitud de los arreglos de datos */6 #define MAX 2078 int main()9 {

    10 FILE *fd;11 int i,ndatos;12 char nombres[MAX ][20]; //MAX cadenas de maximo 19 caracteres y nulo13 int edades[MAX];14 float pesos[MAX];15 char archivo[MAX];1617 printf("Cuantos datos de personas? \n");18 scanf(" %d", &ndatos);19 for(i=0; i

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    escribe personas.c (2/2)

    29 printf("Nombre del archivo? \n");30 scanf(" %s", archivo);3132 fd = fopen(archivo ,"w");33 if(fd == NULL )34 {35 printf("error al abrir el archivo\n");36 return 0;37 }3839 fprintf(fd," %d\n",ndatos);40 for(i=0; i

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    plot char.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Evalua una funcion y almacena los datos como caracteres en un archivo */3 #include 4 #include // debera compilarse: gcc plot_char.c -o plot_char -lm5 #define MAX_NOMBRE 2067 /* Declaracion de la funcion a evaluar */8 float funcion( float );9

    10 /* Definicion de la funcion a evaluar */11 float funcion( float x )12 {13 return sin (10.0*x) + cos (3.0*x);14 }1516 int main()17 {18 char archivo[MAX_NOMBRE ];19 float x,x0,x1 ,deltax;20 int np;21 FILE *fd;2223 printf("Plotea la funcion f(x)=sen10x+cos3x\n");

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 22/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    plot char.c (2/2)

    24 printf("Nombre del archivo donde se almacenara [x, f(x)]: ");25 scanf(" %s",archivo);26 if( (fd=fopen(archivo ,"w+")) == NULL )27 {28 printf("error al abrir el archivo: %s\n",archivo);29 return -1;30 }3132 printf("Intervalo de evaluacion: \n");33 printf("x0: ");34 scanf(" %f" ,&x0);35 printf("x1: ");36 scanf(" %f" ,&x1);37 printf("numero de puntos: ");38 scanf(" %d" ,&np);3940 deltax = (x1-x0)/(float)np;4142 printf("Calculando ...");43 for( x = x0; x < x1; x += deltax )44 fprintf(fd," %f %f\n",x,funcion(x));45 printf("ok\n");4647 fclose(fd);48 return 0;49 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 23/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Datos a plotear datos4.dat

    1 0.000000 1.0000002 0.000500 1.0049993 0.001000 1.0099954 0.001500 1.0149895 0.002000 1.0199816 0.002500 1.0249697 0.003000 1.0299558 0.003500 1.0349389 0.004000 1.039917

    10 0.004500 1.04489411 0.005000 1.04986712 0.005500 1.05483613 0.006000 1.05980214 0.006500 1.06476415 0.007000 1.06972216 0.007500 1.07467717 0.008000 1.07962718 0.008500 1.08457319 0.009000 1.08951420 0.009500 1.09445121 0.010000 1.09938322 0.010500 1.10431123 0.011000 1.10923424 0.011500 1.11415225 0.012000 1.11906426 ...

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 24/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Graficacion con gnuplot en Linux

    oskr@kro:$ gnuplot

    gnuplot> plot datos4.dat with dots

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 25/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    Grafica

    -2

    -1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

    "d.d"

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 26/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    plot byte.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Evalua una funcion y almacena los datos como "bytes" en un archivo */3 #include 4 #include // debera compilarse: gcc plot_byte.c -o plot_byte -lm5 #define MAX_NOMBRE 2067 /* Declaracion de la funcion a evaluar */8 float funcion( float );9

    10 /* Definicion de la funcion a evaluar */11 float funcion( float x )12 {13 return sin (10.0*x) + cos (3.0*x);14 }1516 int main()17 {18 char archivo[MAX_NOMBRE ];19 float x,x0,x1 ,deltax ,fx;20 int np;21 FILE *fd;2223 printf("Plotea la funcion f(x)=sen10x+cos3x\n");

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 27/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    plot byte.c (2/2)

    24 printf("Nombre del archivo donde se almacenara [x, f(x)]: ");25 scanf(" %s",archivo);26 if( (fd=fopen(archivo ,"w+")) == NULL )27 {28 printf("error al abrir el archivo: %s\n",archivo);29 return -1;30 }3132 printf("Intervalo de evaluacion: \n");33 printf("x0: ");34 scanf(" %f" ,&x0);35 printf("x1: ");36 scanf(" %f" ,&x1);37 printf("numero de puntos: ");38 scanf(" %d" ,&np);39 deltax = (x1-x0)/(float)np;4041 printf("Calculando ...");42 for(x = x0; x < x1; x += deltax)43 {44 fwrite (&x,sizeof(float),1,fd);45 fx = funcion(x);46 fwrite (&fx,sizeof(float),1,fd);47 }48 printf("ok\n");49 fclose(fd);50 return 0;51 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 28/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    leePlot byte.c (1/2)

    1 /* Programacion estructurada , 13O, Oscar Alvarado Nava2 Lee los "bytes" almacenados en un archivo , los interpreta como3 flotantes y los mustra como caracteres */4 #include 5 #include // debera compilarse: gcc leePlot_byte.c -o leePlot_byte -lm6 #define MAX_NOMBRE 2078 int main()9 {

    10 char archivo[MAX_NOMBRE ];11 float x,fx;12 int np,i;13 FILE *fd;1415 printf("Muestra los valores de la evaluacion de f(x)=sen10x+cos3x\n");1617 printf("Nombre del archivo donde estan almacenados [x, f(x)]: ");18 scanf(" %s",archivo);19 if( (fd=fopen(archivo ,"r+")) == NULL )20 {21 printf("error al abrir el archivo: %s\n",archivo);22 return -1;23 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 29/30

  • Manejo de archivos en lenguaje C

    Archivos de caracteres

    leePlot byte.c (2/2)

    24 printf("numero de puntos a leer: ");25 scanf(" %d" ,&np);2627 for(i = 0; i < np; i++ )28 {29 fread(&x,sizeof(float),1,fd);30 fread(&fx ,sizeof(float) ,1,fd);31 printf("x: %f, fx: %f\n",x,fx);32 }3334 fclose(fd);3536 return 0;37 }

    Oscar Alvarado Nava UAM Azcapotzalco Archivos 30/30

    Manejo de archivos en lenguaje CArchivos de caracteres