No. 2 de 56 de articulos. Practicas C

Articulos encontrados...

Otro nuevo ejercicio de c para seguir el curso de teleformacion y así poder practicas con ejemplos uno de tus lenguajes de programación favorito.

Enunciado del ejercicio:

Realizar un programa que invierta un fichero de texto creando uno nuevo ( es decir el fichero de destino o final ha de tener el contenido del primero u origen pero al revés ), en vez de solicitar los nombres de archivos en el programa se utiliza la línea de parámetros como si de una orden de linux o ms-dos se tratara. Se utiliza para leer y grabar las funciones fread y fwrite, realizando una reserva de memoria dinámica con la función malloc, y la función free para liberar la memoria utilizada. El ejercicio se ha realizado utilizando el editor Code Blocks bajo Windows 7 y probado en la consola de comandos de Windows 7.

El ejercicio resuelto es el siguiente:

#include <stdio.h>
#include <stdlib.h>

// Predefinición de funciones

int Existe(char *);
long int Tamanyo(char *);

// Función principal

int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }

    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }

    // Declaración de variables necesarias
    FILE *fichero;
    long int cuantos;
    char *reserva=NULL;
    int contador;

    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Averiguar el tamaño del archivo
    cuantos=Tamanyo(argv[1]);
    // Realizar la reserva de memoria correspondiente al tamanyo del fichero
    reserva=(char *)malloc(sizeof(char)*cuantos);
    // leer el archivo completo y almacenarlo en la variable reserva
    fread(reserva,sizeof(char),cuantos,fichero);
    // Cerrar fichero de origen
    fclose(fichero);
    // abrir archivo destino
    fichero=fopen(argv[2],"wt");
    // en caso de error devolver error y salir
    if(!fichero) {
        printf("\nNo se ha podido crear el archivo destino...");
        exit(1);
    }
    // si no existe error recorrer el vector creado en orden inverso
    // y almacenarlo en el archivo destino
    printf("\nInvertir archivo");
    for(contador=cuantos;contador>=0;contador--)
    {
        fwrite(&reserva[contador],sizeof(char),1,fichero);
        printf(".");
    }
    // cerrar el archivo destino
    fclose(fichero);
    // finalizar programa
    printf("Ok\n");
    // Liberar memoria
    free(reserva);
    return 0;
}

// Función Existe

int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe

    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL) {
        fclose(fichero);
    } else {
        resultado=1;
    }
    return resultado;
}

// Función contador

long int Tamanyo(char *nombre_fichero)
{
    FILE *fichero;
    long int contador=0;
    char caracter=0;

    fichero=fopen(nombre_fichero,"rt");
    fread(&caracter,1,sizeof(caracter),fichero);
    while(!feof(fichero))
    {
        contador++;
        fread(&caracter,1,sizeof(caracter),fichero);
    }
    fclose(fichero);
    return contador;
}

Navegacion SeriesAnterior en la serie...Siguiente en la serie...

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies