Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: huchoko en 3 Noviembre 2018, 02:50 am



Título: Leer archivo CSV
Publicado por: huchoko en 3 Noviembre 2018, 02:50 am
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...


Título: Re: Leer archivo CSV
Publicado por: AlbertoBSD en 3 Noviembre 2018, 04:14 am
El codigo lo estare publicando en Leer archivo CSV en C  - Programación Trabajos Escolares (https://programaciontrabajosescolares.blogspot.com/2018/11/leer-archivo-csv-en-c.html)

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/


Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5.  
  6. char temporal[100];
  7.  
  8.  
  9. char ***valores = NULL; //Valores va a contener todos los valores leidos
  10. int *campos_por_linea = NULL;
  11.  
  12. char *pivote = NULL;
  13. int lineas = 0;
  14. int campos = 0;
  15. int longitud = 0;
  16. int i,j;
  17.  
  18. int main() {
  19. FILE *archivo = NULL;
  20. archivo = fopen("autos.csv","r");
  21. if(archivo != NULL) {
  22. do {
  23. memset(temporal,0,100);
  24. fgets(temporal,100,archivo);
  25. lineas++;
  26. valores = realloc(valores,lineas*sizeof(char*));
  27. campos_por_linea = realloc(campos_por_linea,lineas*sizeof(int));
  28. valores[lineas-1] = NULL;
  29. pivote = strtok(temporal,",");
  30. campos = 0;
  31. while (pivote != NULL) {
  32. campos++;
  33. valores[lineas-1] = realloc(valores[lineas-1],sizeof(char*)*campos);
  34. longitud = strlen(pivote);
  35. valores[lineas-1][campos -1] = calloc(longitud+1,sizeof(char));
  36. strncpy(valores[lineas-1][campos -1],pivote,longitud);
  37. pivote = strtok(NULL, ",");
  38. }
  39. campos_por_linea[lineas-1] = campos;
  40. }while(feof(archivo) == 0);
  41. fclose(archivo);
  42. printf("Mostrando valores leidos\n");
  43. i = 0;
  44. while(i < lineas) {
  45. j = 0;
  46. printf("Linea %i\n",i+1);
  47. while(j < campos_por_linea[i]) { // Aqui es donde se procesarian los campos para transformarlos a valores enteres flotantes etc....
  48. printf("Campo %i: %s\n",j+1,valores[i][j]); //Actualmente todos los campos son char*
  49. j++;
  50. }
  51. i++;
  52. }
  53. }
  54. else {
  55. printf("Error leyendo el archivo\n");
  56. }
  57. }
  58.  

Archivo:

Código:
Auto,4343,5832
Auto2,5343,8720
Auto3,53423,81220

Salida

Código:
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