Logo Studenta

ARCHIVOS DE TEXTO

¡Este material tiene más páginas!

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

Continuar navegando