Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Soluciones A Los Ejemplos de Ficheros

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 14

Ejemplo 1. Creacin de un fichero de texto carcter a carcter.

/* Programa: Crear_fichero.c */
#include <stdio.h>
#define EOL 10
main(argc, argv)
int argc;
char *argv[];
{
char nombre_fichero[20];
FILE * fd;
int c;
int ant;
if (argc != 2) {
printf ("\nIntroduzca nombre de fichero: ");
gets(nombre_fichero);
} else strcpy (nombre_fichero, argv[1]);
if ((fd = fopen (nombre_fichero, "w")) == NULL)
{ printf ("Error"); exit(); }
ant = EOL;
while ((c = getchar()) != '.' || ant != EOL) {
ant = c;
fputc (c, fd);
};
fclose (fd);
}

Ejemplo 2. Crear un fichero linea a linea.


/*crear_fichero_cadenas.c */
#include <stdio.h>
#define EOL 10
main(argc, argv)
int argc;
char *argv[];
{
char nombre_fichero[20];
FILE * fd;
char cadena[80];
int ant;
if (argc != 2) {
printf ("\nIntroduzca nombre de fichero: ");
gets(nombre_fichero);
} else strcpy (nombre_fichero, argv[1]);
if ((fd = fopen (nombre_fichero, "w")) == NULL)
{ printf ("Error"); exit(); }
gets(cadena);
while (strcmp(cadena, ".")) {
fputs(cadena, fd);
fputs("\n",fd);
gets(cadena);
};
fclose (fd);
}

Ejemplo 3. Recorrido de un fichero de texto carcter a


carcter.
/* recorrido_c_c.c Recorre un fichero que se pasa como
argumento
al programa caracter por caracter */
/* Funciona como un cat o type fichero | more */
#include <stdio.h>
main(cuantos, argumentos)
int cuantos;
char *argumentos[];
{
char nombre[12];
FILE * fd;
int c;
if (cuantos != 2) {
printf ("\nNecesito un nombre de fichero: ");
gets (nombre);
}
else strcpy (nombre, argumentos[1]);
/* Recorrido de un fichero de texto caracter a caracter.
Ejemplo de uso de la funcion fgetc */
if ((fd = fopen (nombre, "r")) == NULL ) exit();
printf ("\nComienzo:\n \n");
while ((c = fgetc(fd)) != EOF) putchar(c);
printf ("\nFin: \n");
}

Ejemplo 4. Recorrido de un fichero de texto lnea a lnea.


/* recorrido_l_l.c Recorre un fichero que se pasa como argumento
al programa linea por linea */
/* Funciona como un cat o type fichero | more */
#include <stdio.h>
main(cuantos, argumentos)
int cuantos;
char *argumentos[];
{
char nombre[12];
FILE * fd;
char cadena[80];
if (cuantos != 2) {
printf ("\nNecesito un nombre de fichero: ");
gets (nombre);
}
else strcpy (nombre, argumentos[1]);
/* Recorrido de un fichero de texto caracter a caracter.
Ejemplo de uso de la funcion fgetc */
if ((fd = fopen (nombre, "r")) == NULL ) exit();
printf ("\nComienzo:\n \n");
while (fgets(cadena, 80, fd) != NULL) printf ("%s",cadena);
/* puts(cadena); pone un \n despues de cada linea */
printf ("\nFin: \n");
}

Ejemplo 5. Bsqueda en un fichero carcter a carcter.


/* busqueda_c_c.c Recorre un fichero que se pasa como
argumento
al programa caracter por caracter y busca todas las ocurrencias
de la letra que se pasa como argumento, indicando el nmero de
apariciones
por linea y numero de apariciones totales.*/
#include <stdio.h>
main(cuantos, argumentos)
int cuantos;
char *argumentos[];
{
char nombre[12];
FILE * fd;
int c, equis;
int num, linea, num_tot; /* Contadores */
if (cuantos != 2) {
printf ("\nNecesito un nombre de fichero: ");
gets (nombre);
} else strcpy (nombre, argumentos[1]);
/* Pide un caracter que tiene que buscar en el fichero */
printf ("\nIntroduzca el caracter que quiere buscar en %s: ",
nombre);
equis = getchar();
if ((fd = fopen (nombre, "r")) == NULL ) {
printf ("Error en la apertura del fichero %s", nombre);
exit(); }
linea = 0; num_tot = 0;
while ((c = fgetc(fd)) != EOF) {
num = 0;

while (c != '\n' && c != EOF) {


if (c == equis) num++;
c = fgetc(fd); }
linea++;
if (num != 0) {
printf ("\nNumero de ocurrencias en la linea %d: %d", linea,
num);
num_tot += num;}
};
printf ("\nNumero total de ocurrencias: %d\n", num_tot);
}

Ejemplo 6. Bsqueda en un fichero leyendo lnea a lnea.


/* busqueda_p Recorre un fichero que se pasa como argumento
al programa caracter por caracter y busca todas las ocurrencias
de una palabra */
#include <stdio.h>
main(cuantos, argumentos)
int cuantos;
char *argumentos[];
{
char nombre[12], palabra[20], cadena[20];
static char *linea;
FILE * fd;
int c;
int num, hay_otra; /* Contadores */
linea = (char *) calloc (80, sizeof(char));
if (cuantos < 2) {
printf ("\nNecesito un nombre de fichero: ");
gets (nombre);
}else strcpy (nombre, argumentos[1]);
/* La palabra a buscar puede estar en la linea de comandos, tras
el
nombre de fichero o bien se toma ahora por teclado */
if (cuantos != 3) {
printf ("\nPalabra a buscar: ");
gets (cadena);
} else strcpy (cadena, argumentos[2]);
if ((fd = fopen (nombre, "r")) == NULL ) {
printf ("Error en la apertura del fichero %s", nombre);
exit(); }

num = 0;
while (fgets(linea, 80, fd) != NULL) {
/* En linea esta toda la linea. Hay que extraer palabras */
while (extraer (palabra, &linea))
if (strcmp (palabra, cadena) == 0) num++;
};
printf ("\nNumero total de ocurrencias: %d\n", num);
}
/* Extrae un palabra en p, del puntero a vector s. */
/* char **s es un puntero a un vector. *s es el vector */
extraer (p, s)
char *p, **s;
{
char *tmp;
tmp = p;
while (valido (**s) == 0 && **s != '\0')
*s = *s + 1;
while (valido(**s) == 1){
*tmp++ = **s;
*s = *s + 1;
};
*tmp = '\0';
/* puts(p); */
return strlen(p);
}
valido(c)
char c;
{
return (isalpha(c) || isdigit(c));
}

Ejemplo 7. Manejo de registros I.


#include <stdio.h>
typedef struct{
char nombre[20], apellidos[30];
long int dni;
} registro;
void lee_datos();
int lee_registro();
void escribe_registro();
main(){
registro r;
int s, nr;
char fichero[15];
FILE *fich;
void lee_datos(), escribe_registro();
int lee_registro();
printf ("Nombre del fichero que contendra los datos: ");
gets(fichero);
fich = fopen (fichero, "a");
printf ("Quieres meter otro dato?: (1=si, 0=no)");
scanf (" \n%d",&s);
while (s){
lee_datos (&r, fich);
escribe_registro (r, fich);
printf ("Quieres meter otro dato?: (1=si, 0=no)");
scanf (" \n%d",&s);
};
fclose(fich);

nr = 0;
fich = fopen (fichero, "r");
while (lee_registro(&r, fich, nr++) != EOF){
printf ("\nRegistro: \n");
printf ("%20s ; %30s ; %8ld", r.nombre, r.apellidos, r.dni);
};
fclose(fich);
}
void lee_datos(r)
registro * r;
{
char ocho[9];
printf ("Dame el nombre: "); scanf(" \n%20s",r->nombre);
printf ("Dame los apellidos: "); scanf (" \n%30s", r->apellidos);
printf ("Dame el dni: "); scanf(" \n%s", ocho);
r->dni = atol(ocho);
}
int lee_registro (r, f, offset)
registro *r;
FILE * f;
int offset;
{
lseek (f, (long) offset * sizeof (registro), 0);
return fscanf (f, " \n%20s \n%30s \n%ld", r->nombre, r>apellidos, &(r->dni));
}
void escribe_registro (r, f)
registro r;
FILE *f;
{

fprintf (f,"%20s\n%30s\n%ld\n", r.nombre, r.apellidos, r.dni);


}

Ejemplo 8. Manejo de registros II


#include <stdio.h>
typedef struct{
char nombre[20], apellidos[30];
long int dni;
} registro;
void lee_datos();
int lee_registro();
void escribe_registro();
main(argc, argv)
int argc;
char *argv[];
{
registro r;
int s, nr;
char fichero[15];
FILE *fich;
void lee_datos(), escribe_registro();
int lee_registro();
if (argc == 1) {
printf ("Nombre del fichero que contendra los datos: ");
gets(fichero);
} else strcpy (fichero, argv[1]);
fich = fopen (fichero, "a");
printf ("Quieres meter otro dato?: (1=si, 0=no)");
scanf (" \n%d",&s);
while (s){
lee_datos (&r, fich);
escribe_registro (r, fich);

printf ("Quieres meter otro dato?: (1=si, 0=no)");


scanf (" \n%d",&s);
};
fclose(fich);
nr = 0;
fich = fopen (fichero, "r");
while (lee_registro(&r, fich, nr++) != EOF){
printf ("\nRegistro: \n");
printf ("%s ; %s ; %ld", r.nombre, r.apellidos, r.dni);
};
fclose(fich);
}
void lee_datos(r)
registro * r;
{
char ocho[9];
printf ("Dame el nombre: "); scanf(" \n%s",r->nombre);
printf ("Dame los apellidos: "); scanf (" \n%s", r->apellidos);
printf ("Dame el dni: "); scanf(" \n%s", ocho);
r->dni = atol(ocho);
}
int lee_registro (r, f, offset)
registro *r;
FILE * f;
int offset;
{
int i;
lseek (f, (long) offset * sizeof (registro), 0);
return fscanf (f, " \n%s : %s : %ld", r->nombre, r->apellidos,
&(r->dni));
}

void escribe_registro (r, f)


registro r;
FILE *f;
{
fprintf (f,"%s : %s : %ld\n", r.nombre, r.apellidos, r.dni);
}

También podría gustarte