En este post de programación en C te mostraré cómo leer un archivo de texto y llenar un arreglo a partir del mismo. Es decir, llenar un arreglo con el contenido de un archivo de texto.

El arreglo en cuestión será un arreglo de cadenas. Recuerda que un arreglo tiene un tamaño definido en tiempo de compilación, así que si quieres algo que crezca mientras haya memoria disponible puedes usar una pila dinámica.

Explicación del algoritmo

Lo que vamos a hacer es leer el archivo línea por línea, llevar un contador de las líneas para usarlo como índice para acceder al archivo, y en cada lectura de la línea, copiar usando memcpy hacia el arreglo.

Finalmente vamos a imprimir el arreglo llenado a partir de un archivo. Todo esto usando C.

Leer archivo de texto y pasarlo a arreglo

Comenzamos declarando algunas constantes que definirán el máximo tamaño de la línea que se lee, así como la máxima longitud del arreglo. En este caso nuestro archivo tiene 20 líneas.

#include <stdio.h>
#include <string.h>
// Debe ser de la máxima + 1. Por ejemplo, si la máxima es 4, defínela como 5
#define MAXIMA_LONGITUD_CADENA 1000
// La máxima cantidad de líneas que puede tener
#define CANTIDAD_LINEAS 20
#define NOMBRE_ARCHIVO "archivo.txt

Después declaramos el arreglo que vamos a llenar a partir del archivo de texto, e intentamos abrir el archivo:

// Arreglo de cadenas: aquí almacenamos todas las palabras
char palabras[CANTIDAD_LINEAS][MAXIMA_LONGITUD_CADENA];
// Útil para leer el archivo
char buferArchivo[MAXIMA_LONGITUD_CADENA];
// Abrir el archivo...
FILE *archivo = fopen(NOMBRE_ARCHIVO, "r");
if (archivo == NULL)
{
    printf("No se puede abrir el archivo");
    return 0;
}

Luego copiamos el archivo de texto al arreglo. Agregamos la cadena al arreglo usando memcpy en la línea 9.

// Necesitamos este ayudante para saber en qué línea vamos
int indice = 0;
// Mientras podamos leer una línea del archivo
while (fgets(buferArchivo, MAXIMA_LONGITUD_CADENA, archivo))
{
    // Remover salto de línea
    strtok(buferArchivo, "\n");
    // Copiar la línea a nuestro arreglo, usando el índice
    memcpy(palabras[indice], buferArchivo, MAXIMA_LONGITUD_CADENA);
    // Aumentarlo en cada iteración
    indice++;
}

Finalmente cerramos el archivo e imprimimos el arreglo. Obviamente podemos procesar el arreglo de cualquier manera, es decir, ordenarlo, guardarlo en otro archivo, etcétera.

// Terminamos de leer
fclose(archivo);
// Ahora ya tenemos el arreglo. Podemos imprimirlo
int i;
for (i = 0; i < CANTIDAD_LINEAS; i++)
{
    printf("Tenemos una línea: '%s'\n", palabras[i]);
}

Poniendo todo junto

El código completo para pasar el contenido de un archivo a un arreglo en C queda así:

#include <stdio.h>
#include <string.h>
// Debe ser de la máxima + 1. Por ejemplo, si la máxima es 4, defínela como 5
#define MAXIMA_LONGITUD_CADENA 1000
// La máxima cantidad de líneas que puede tener
#define CANTIDAD_LINEAS 20
#define NOMBRE_ARCHIVO "archivo.txt"

/*
 https://parzibyte.me/blog
*/
int main()
{
    // Arreglo de cadenas: aquí almacenamos todas las palabras
    char palabras[CANTIDAD_LINEAS][MAXIMA_LONGITUD_CADENA];
    // Útil para leer el archivo
    char buferArchivo[MAXIMA_LONGITUD_CADENA];
    // Abrir el archivo...
    FILE *archivo = fopen(NOMBRE_ARCHIVO, "r");
    if (archivo == NULL)
    {
        printf("No se puede abrir el archivo");
        return 0;
    }
    // Necesitamos este ayudante para saber en qué línea vamos
    int indice = 0;
    // Mientras podamos leer una línea del archivo
    while (fgets(buferArchivo, MAXIMA_LONGITUD_CADENA, archivo))
    {
        // Remover salto de línea
        strtok(buferArchivo, "\n");
        // Copiar la línea a nuestro arreglo, usando el índice
        memcpy(palabras[indice], buferArchivo, MAXIMA_LONGITUD_CADENA);
        // Aumentarlo en cada iteración
        indice++;
    }

    // Terminamos de leer
    fclose(archivo);
    // Ahora ya tenemos el arreglo. Podemos imprimirlo
    int i;
    for (i = 0; i < CANTIDAD_LINEAS; i++)
    {
        printf("Tenemos una línea: '%s'\n", palabras[i]);
    }
    return 0;
}

También puedes leer más sobre C en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.