Guardar palabras entre " " y separadas por comas en un array. Lenguaje C

Iniciado por galapok11, 10 Agosto 2016, 15:52 PM

0 Miembros y 1 Visitante están viendo este tema.

galapok11

Saludos, este es mi primer tema.
Dispongo de un archivo.txt con mas de 5.000 nombres separados por comas y entre comillas.
Me gustaria saber como guardar todos ellos en un array.
Gracias por leerme y mas un por vuestra futura respuesto.

AlbertoBSD

#1
Suponiendo que puedes Leer TODO el contenido del archivo en Memoria y Guardarlo en un Buffer.

Lo que tendrias que hacer es lo siguiente:

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

int main() {
int  total = 0;
char **arreglo = NULL;
char *buffer; // Deberias de lee y guardar Todo el contenido del archivo en esta variable.
char *token = NULL;
token = strtok(buffer,",");
while(token != NULL) {
arreglo = realloc(arreglo, sizeof(char*) * (total +1));
arreglo[total] = token;
printf("Nombre %i: %s\n",total+1,arreglo[total]);
total++;
token=strtok(NULL,",");
}
}


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW


Yoel Alejandro

Está genial, usas strtok() para crear dinámicamente un arreglo de apuntadores a las distintas "palabras" en que se divide la cadena original.
Sólo un pequeño detalle, muy pequeño, creo que faltó inicializar el total a 0:

int total = 0;
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

AlbertoBSD

 ;-) ;-) ;-) ;-) ;-)

Muchas gracias!! así es, no hago caso de mis propios consejos de inicializar las variables.... También debo de mencionar que lo escribí en el celular mientras me trasladaba al trabajo en el Bus  :rolleyes:

Ya edite el codigo

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

class_OpenGL

También en la línea 10 se te olvida escribir la función xD

token = strtok(buffer,","); // Se te olvidó strtok!!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Yoel Alejandro

Por cierto que este post es un tributo a strtok(), una función sumamente poderosa y que no todos (especialmente principiantes) conocen bien.

Recuerdo una vez escribí un código para analizar sintácticamente un trozo de HTML que implementabla una tabla, ya saben con <tr>, <th>, etc. La idea era automatizar la tarea de descargar diariamente un fichero html desde un servidor (usando un gestor como wget.exe) y extraer los datos de la tabla a partir del HTML recibido. Luego, por supuesto una serie de cálculos a partir de dichos datos. Y bueno, ... ya me alejé del punto central, que era que mi programa analizaba todo el fragmento de <table> ... </table> usando strtok().

Aún debo tener el código por ahí, lo estuve buscando pero creo que se me borró de la computadora snif, snif, jaja.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

AlbertoBSD

Buscabas por "<>"me imagino.

Si muchos no se quieren complicar la vida con tanto apuntador y direcciones de memoria,  buscan ya algo ya hecho como el StringTokenizer de Java en fin...
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW