Leer archivo CSV

Iniciado por huchoko, 3 Noviembre 2018, 02:50 AM

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

huchoko

Hola, tengo este problema...
Tengo un archivo CSV, el cúal tiene esto:
Auto,4343,5832
Auto2,5343,8720
y necesito mostrar cada uno de esos valores que están separados por comas. (se podría guardar en un vector)
Todo lo que he encontrado no me ha funcionado.
Saludos
edit:
en realidad lo necesitaba para C++, pero olvide especificarlo :facepalm:, asi que es mi culpa, tendré que poortear mi código de C++ a C, para que me funcione. no me odien por mi estupidez...

AlbertoBSD

#1
El codigo lo estare publicando en Leer archivo CSV en C  - Programación Trabajos Escolares

Si tienes mas peticiones de programas no dudes en pedirlos en la pagina anterior o en la pagina de FB del mismo Nombre https://www.facebook.com/ProgramacionTrabajosEscolares/



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


char temporal[100];


char ***valores = NULL; //Valores va a contener todos los valores leidos
int *campos_por_linea = NULL;

char *pivote = NULL;
int lineas = 0;
int campos = 0;
int longitud = 0;
int i,j;

int main() {
FILE *archivo = NULL;
archivo = fopen("autos.csv","r");
if(archivo != NULL) {
do {
memset(temporal,0,100);
fgets(temporal,100,archivo);
lineas++;
valores = realloc(valores,lineas*sizeof(char*));
campos_por_linea = realloc(campos_por_linea,lineas*sizeof(int));
valores[lineas-1] = NULL;
pivote = strtok(temporal,",");
campos = 0;
while (pivote != NULL) {
campos++;
valores[lineas-1] = realloc(valores[lineas-1],sizeof(char*)*campos);
longitud = strlen(pivote);
valores[lineas-1][campos -1] = calloc(longitud+1,sizeof(char));
strncpy(valores[lineas-1][campos -1],pivote,longitud);
pivote = strtok(NULL, ",");
}
campos_por_linea[lineas-1] = campos;
}while(feof(archivo) == 0);
fclose(archivo);
printf("Mostrando valores leidos\n");
i = 0;
while(i < lineas) {
j = 0;
printf("Linea %i\n",i+1);
while(j < campos_por_linea[i]) { // Aqui es donde se procesarian los campos para transformarlos a valores enteres flotantes etc....
printf("Campo %i: %s\n",j+1,valores[i][j]); //Actualmente todos los campos son char*
j++;
}
i++;
}
}
else {
printf("Error leyendo el archivo\n");
}
}


Archivo:

Auto,4343,5832
Auto2,5343,8720
Auto3,53423,81220


Salida

Mostrando valores leidos
Linea 1
Campo 1: Auto
Campo 2: 4343
Campo 3: 5832

Linea 2
Campo 1: Auto2
Campo 2: 5343
Campo 3: 8720

Linea 3
Campo 1: Auto3
Campo 2: 53423
Campo 3: 81220
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW