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.