Programa en C para Concatenar Dos Archivos de Texto: Código Comentado y Explicado

Informática y Telecomunicaciones3,49 KB

Programa en C para concatenar dos archivos de texto

A continuación se presentan dos versiones de un programa en lenguaje C que copia el contenido de dos archivos de texto en un tercer archivo llamado destino.txt. La primera versión solicita los nombres de los archivos por teclado; la segunda los recibe como argumentos de línea de comandos.

Versión 1: nombres de archivo solicitados por teclado

Nombre del programa: examen2

#include <stdio.h>
#include <conio.h>
//#include <stdlib.h>
#include <string.h>
//#include <ctype.h>

void main()
{
FILE *Fdestino;   // Declarar al inicio de la función
FILE *Forigen1;
FILE *Forigen2;
char archivo1[20];
char archivo2[30];
//char cad[2048];
char linea[128];

printf("\nNombre del archivo 1: ");
scanf("%s", archivo1);

printf("\nNombre del archivo 2: ");
scanf("%s", archivo2);

if (((Forigen1 = fopen(archivo1, "r")) == NULL) ||
    ((Forigen2 = fopen(archivo2, "r")) == NULL) ||
    ((Fdestino = fopen("destino.txt", "w")) == NULL))
{
    printf("\nError de apertura de fichero de texto");
    getch();
}
else
{
    while (fgets(linea, 128, Forigen1) != NULL)
    {
        printf("\n %s", linea);
        // strcat(cad, linea);
        fputs(linea, Fdestino);
    }

    while (fgets(linea, 128, Forigen2) != NULL)
    {
        printf("\n %s", linea);
        // strcat(cad, linea);
        fputs(linea, Fdestino);
    }
    printf("\n\n");
    //printf("%s", cad);
}
fclose(Fdestino);
fclose(Forigen1);
fclose(Forigen2);
getch();
}

Versión 2: nombres de archivo como argumentos de línea de comandos

Nombre del programa: examen2

#include <stdio.h>
#include <conio.h>
//#include <stdlib.h>
#include <string.h>
//#include <ctype.h>

void main(int argc, char *argv[])
{
FILE *Fdestino;   // Declarar al inicio de la función
FILE *Forigen1;
FILE *Forigen2;
char archivo1[20];
char archivo2[30];
//char cad[2048];
char linea[128];

/* printf("\nNombre del archivo 1: ");
scanf("%s", archivo1);

printf("\nNombre del archivo 2: ");
scanf("%s", archivo2);
*/
if (((Forigen1 = fopen(argv[1], "r")) == NULL) ||
    ((Forigen2 = fopen(argv[2], "r")) == NULL) ||
    ((Fdestino = fopen("destino.txt", "w")) == NULL))
{
    printf("\nError de apertura de fichero de texto");
    getch();
}
else
{
    while (fgets(linea, 128, Forigen1) != NULL)
    {
        printf("\n %s", linea);
        // strcat(cad, linea);
        fputs(linea, Fdestino);
    }
    while (fgets(linea, 128, Forigen2) != NULL)
    {
        printf("\n %s", linea);
        // strcat(cad, linea);
        fputs(linea, Fdestino);
    }
    printf("\n\n");
    //printf("%s", cad);
}
fclose(Fdestino);
fclose(Forigen1);
fclose(Forigen2);
getch();
}

Observaciones

Ambas versiones abren los archivos de origen en modo lectura ("r") y el archivo destino.txt en modo escritura ("w"), copiando línea a línea el contenido del primero y después del segundo. La función fgets lee como máximo 127 caracteres por línea, y fputs escribe la cadena en el destino.

En la versión 2, los argumentos argv[1] y argv[2] corresponden a los nombres de los dos archivos de origen. Es recomendable verificar que argc sea al menos 3 antes de acceder a estos índices.

Descargar

PDF Word HTML