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

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.