Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
ARCHIVOS de TEXTOS APERTURA DE UN ARCHIVO DE TEXTO Para abrir un archivo de texto se utiliza la instrucción fopen, los parámetros que se utilizan para el segundo argumento son: “r” Abre para la lectura “w” Abre para crear un nuevo archivo (si ya existe se pierden los datos. “a” Abre para añadir “r+” Abre archivo ya existente para modificar (leer/escribir) “w+” Crea un archivo para escribir/leer (si ya existe se pierden los datos “a+” Abre el archivo para modificar (escribir/leer) al final. Si no existes como w+ Ejemplo: FILE *tex; tex = fopen(“Ciudades.txt”,”w”); Abrir un archivo para lectura implica la existencia del mismo, si ésta condición no es válida el puntero de archivo será igual a NULL y esto puede ser verificado utilizando el siguiente código: if (fp==NULL) { printf("Error al abrir el archivo \n"); exit (1); } Es una buena práctica de programación checar todos los punteros de archivo en una forma similar al código de arriba, el valor de 1 utilizado como parámetro de exit ( ) termina un programa. Antes de terminar se cierran todos los archivos, el valor que devuelve es 0 (cero) si la salida en normal y distinto de 0 (cero) que indica un error. PROBLEMA EN LA APERTURA DE ARCHIVO CERRAR EL ARCHIVO Para cerrar un archivo se utiliza la función fclose ( ) con el puntero de archivo dentro del paréntesis. En algunos programas sencillos no es necesario cerrar el archivo ya que el sistema operativo se encarga de cerrar los archivos que hayan quedado abiertos antes de retornar el control al usuario, sin embargo es buena práctica cerrar en código todo aquel archivo que se abra. ESCRITURA EN UN ARCHIVO DE TEXTO Para poder grabar en un archivo de texto, se puede utilizar varias instrucciones: fprintf (puntero asociado a la variable file, “texto que se va a grabar en el archivo”) fprintf (fp, "Juan"); fprintf (fp, strcat(nombre,"\n")); putc('M', final); Para agregar datos carácter por carácter LECTURA DE UN ARCHIVO DE TEXTO getc(nombre)); /* Obtiene un caracter del archivo */ fscanf(fp1, "%s", palabra); /* Obtiene una palabra del archivo */ fgets(palabra, 100, fp1); /* Obtiene una linea del archivo */ FILE *archivo; archivo=fopen("regis.txt","w"); for(i=0;i<n;i++) { fprintf(archivo, "%d;%s;%d;%.2f;%s", alumno[i].legajo,alumno[i].apynom,alumno[i].cursa,alumno[i].promedio,"\n"); } fclose(archivo); RUTINA PARA GRABAR LOS DATOS DE UNA ESTRUCTURA DE REGISTRO A UN ARCHIVO DE TEXTO (Separado por ;) struct registro { int legajo; char apynom[45]; int cursa; float promedio; }; ESCRITURA DE UN ARCHIVO Ejemplo para grabar cadenas a un archivo de texto #include <stdio.h> #include <string.h> #include <stdlib.h> main() { FILE *fp; fp = fopen("nombres.txt", "w"); /* Abrir archivo para escritura */ fprintf(fp, "Juan \n"); fprintf(fp, "Pedro \n"); fprintf(fp, "Matias \n"); fprintf(fp, "Julian \n"); fprintf(fp, "Belen \n"); fclose(fp); /* Cerrar el archivo antes de terminar el programa */ printf("Se ha creado el archivo: nombres.txt \n"); system("pause"); } AGREGAR DATOS CARACTER POR CARACTER Como vimos en el programa anterior, el archivo generado llamado nombres.txt agregaremos información al mismo. Para agregar datos carácter por carácter se puede realizar a través de la instrucción: putc (carácter, variable puntero al archivo ) El carácter va entre comilla sencilla, incluyendo el caso del carácter de retorno de carro '\n’. #include <stdio.h> #include <string.h> #include <stdlib.h> main() { FILE *final; final = fopen("nombres.txt", "a"); /* Abrir archivo para concatenar */ if (final == NULL) { printf("Falla al abrir el archivo \n"); exit (1); } putc('M', final); putc('A', final); putc('R', final); putc('I', final); putc('A', final); fclose(final); } LECTURA DE UN ARCHIVO En este caso se lee un solo carácter a la vez, se lo muestra en pantalla hasta encontrar un caracter EOF (EndOf File, Fin de Archivo). La instrucción para obtener un carácter es getc(puntero relacionado al archivo); #include <stdio.h> #include <stdlib.h> #include <windows.h> main() { FILE *nombre; nombre = fopen("nombres.txt", "r"); if (nombre == NULL) { printf("El archivo no existe \n"); exit (EXIT_FAILURE); } else { while (!feof(nombre)) { printf("%c",getc(nombre)); /* Obtiene un caracter del archivo */ Sleep(300); /* Lo despliega en pantalla y continua... */ } /* hasta encontrar EOF (el final del archivo)*/ } fclose(nombre); printf("\n"); system("pause"); } En este caso se lee una sola palabra a la vez, se lo muestra en pantalla hasta detectar un caracter EOF (EndOf File, Fin de Archivo). La instrucción para obtener una palabra es fscanf(variable puntero relacionada al archivo, "%s", string); #include <stdio.h> #include <conio.h> main() { FILE *fp1; char palabra[100]; fp1 = fopen("nombres.txt", "r"); while (!feof(fp1)) /* Se repite hasta encontrar EOF */ { fscanf(fp1, "%s", palabra); /* Obtiene una palabra del archivo */ printf("%s\n",palabra ); /* la despliega en pantalla */ } fclose(fp1); printf("\n"); system("pause"); } En este caso se lee una línea, se lo muestra en pantalla hasta detectar un carácter EOF (EndOfFile, Fin de Archivo). La instrucción para obtener una línea es: fgets(variable cadena, cantidad de caracteres, puntero relacionado al archivo); #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { FILE *fp1; char palabra[100]; fp1 = fopen("nombres.txt", "r"); if (fp1 == NULL) { printf("Error al abrir el archivo \n"); exit (EXIT_FAILURE); } while (!feof(fp1)) { fgets(palabra, 100, fp1); /* Obtiene una linea del archivo */ printf("%s", palabra); /* La despliega en pantalla */ } fclose(fp1); printf("\n"); system("pause"); } EJEMPLO DE APLICACIÓN Ingrese N nombres de ciudades, guárdelas en un archivo de texto y al final muestre el mismo. #include <stdio.h> #include <string.h> #include <conio.h> main () { FILE *fp; int i,n; char ciudad[100]; printf("Ingrese la cantidad de ciudades a ingresar: "); scanf("%d", &n); fp=fopen("ciudades.txt","w"); _flushall(); for (i=0;i<n;i++) { gets(ciudad); if (i<n-1) fprintf(fp, strcat(ciudad,"\n")); else fprintf(fp, ciudad); } fclose(fp); printf("\nLOS NOMBRES DE CIUDADES INGRESADOS SON:\n"); fp = fopen("ciudades.txt", "r"); while (!feof(fp)) /* Hasta encontrar NULL */ { fgets(ciudad,100,fp); printf("%s",ciudad); // La despliega en pantalla } printf("\n"); system("pause"); fclose(fp); } #include<stdio.h> #include <string.h> #include <stdlib.h> main() { FILE *ficheroTexto; char frase[61]; int i=0; ficheroTexto = fopen("frases.txt", "w"); printf(" PROGRAMA para ESCRIBIR y almacenar FRASES.\n" "Cuando quiera salir, simplemente pulse \"Intro\".\n\n"); //Carga el archivo de texto do { puts("\nEscriba una FRASE:\n(o pulse \"Intro\"). \n"); gets(frase); fprintf(ficheroTexto, "%s \n", frase); } while (strcmp(frase, "") != 0); printf("Ud. escribio lo siguiente:\n\n"); fclose(ficheroTexto); } //Visualiza el contenido del archivo de texto ficheroTexto = fopen("frases.txt", "r"); do { fgets(frase, 60, ficheroTexto); puts(frase); } while (!feof(ficheroTexto)); system("pause"); printf("\n...Hasta luego!\n"); system("pause"); fclose(ficheroTexto); ENUNCIADO: En un archivo de texto, el cual está formado por apellido y nombre de personas. SE PIDE: 1- Ingresar apellido y nombre de N personas. 2- Realiza el listado de los datos (apellidos y nombres) guardados en el archivo de texto. 3- Ordena el archivo de texto, según la longitud del apellido y nombre de cada persona. 4- Realiza el listado de los nombres ordenados. #include <stdio.h> #include <stdlib.h> #include <string.h> /*----- Declarar un tipo de dato nuevo -----*/ typedef char nombPers[20]; //Tipo de dato "nombPers" de 20 caracteres. void listarArchivo(void){ char nombres[20]; FILE *fichero; fichero = fopen("Nombres.txt", "r"); fgets(nombres,20, fichero); while (!feof(fichero)){ puts(nombres); fgets(nombres, 20, fichero);//Continua leyendo 20 caracteres hasta el final archivo. } fclose(fichero); mensaje("F I N DEL L I S T A D O.........."); system("PAUSE"); system("CLS"); } //Fin de la función listarArchivo(). /*----- Declaración Prototipos de las Funciones Auxiliares -----*/ void mensaje(char const *cadena); /*----- Declaración Prototipos de Funciones -----*/ void cargarNombres(int N); //Punto 01 void listarArchivo(void); //Punto 02 void ordenarArchivo(int N); //Punto 03 /*------------------------ Bloque Principal ------------------------ -------- Tipo de Función : Sin Tipo. Devuelve : Ningún Valor. Parámetros : Ninguno. Descripción : Bloque principal, comienza a ejecutarse el programa. ---------------------------------------------------------------------- --------*/ main(){ int N=0; printf("Cuantos Nombres Desea Ingresar: "); scanf("%d", &N); cargarNombres(N); listarArchivo(); ordenarArchivo(N); listarArchivo(); } //Final de la función Principal main ().
Compartir