Программа на C для чтения файла CSV с fgets в строке и форматированием переменных с помощью strtok
En este post teenmos:
- Archivo CSV
- Archivo en C con formateo con strtok
- Resultado en Consola
----------------------------------------------
----------------------------------------------
El archivo en CSV es:
----------------------------------------------
----------------------------------------------
----------------------------------------------
#,ID,Nombre,Apellidos,Altura,Peso,Sexo
1,1007108199,Carlos,Londoño,1.7,63,Masculino2,1017269056,Santiago,Suarez,1.71,70,Masculino
3,1193131583,Juli n,Zapata Guti‚rrez,1.7,80,Masculino
4,1234643466,Juan Sebastian,Rodriguez Cardona,1.7,65,Masculino
5,1017180877,Hector ,Ramirez,1.72,68,masculino
6,1035922621,Sebastian,Molina,1.81,78,Masculino
7,1193275962,Juan,Ossa,1.66,60,Masculino
8,1020487219,Luis µngel,Ram¡rez,1.76,68,Masculino
9,1035442744,Cristian david,Montes castaño,1.82,71,Masculino
10,1017225274,John,Estrada ,1.77,76,Masculino
11,1039473649,Bryan ,Ortiz,1.75,70,Masculino
12,1005856597,Helian ,Moreno,1.74,65,Masculino
13,1001236309,Mateo,L¢pez P‚rez,1.86,83,Masculino
14,1017271133,Sebastian,Arboleda Martinez,1.78,65,Masculino
15,1001233950,Juan Fernando,Arboleda,1.71,65,Masculino
16,43221494,Astrid,Arboleda ,1.7,52,Femenino
17,1003291166,Andres,Mendoza Gonzalez,1.75,66,Masculino
18,1005679318,Alex ,Baldovino,1.78,70,masculino
19,1020467588,Cristian,Cabrera,1.78,70,Masculino
20,1035441229,Sebastian,Cuencar Cardona,1.75,68,Masculino
21,1018352086,Maria Yeniffer,Arango Montoya,1.56,57,Femenino
22,1001741212,jose ricardo,palacio rios,1.71,63,Masculino
23,1152472402,Julian Mateo,Noreña Ramirez,1.76,84,Masculino
24,1002065482,Diego Fernando,Taborda Arango,1.71,86,Masculino
25,1039475603,Valentina,Arredondo ,1.75,58,Femenino
26,1027888770,Andres Ferney,Buitrago Suarez,1.81,72,Maculino
27,1000869689,Daniel Alexander,Serna Eusse,1.68,57,Masculino
28,1193069203,Jair Armando,Camacho Bonilla,1.78,62,Masculino
29,1017265093,Jhonny ,Hernandez,1.67,53,Masculino
30,18253192,Santiago,Uribe,1.71,90,Masculino
----------------------------------------------
----------------------------------------------
El programa en C es:
----------------------------------------------
----------------------------------------------
----------------------------------------------
----------------------------------------------
El resultado en consola es:
----------------------------------------------
----------------------------------------------
----------------------------------------------
El programa en C es:
----------------------------------------------
----------------------------------------------
/* clase157.c
Description: Read a File CSV with several data types separated with tabs. Data are saved in arrays
Autor: Alexander Arias
Date: april 13, 2020
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *archivo;
int str_size;
char linea[100];
int i=0;
int numero[30];
int id[30];
char nombre[30][20];
char apellidos[30][20];
float altura[30];
float peso[30];
char sexo[30][10];
char* delimiter = ",";
archivo = fopen("2019-1 Archivo Clase 52.csv","r");
if (archivo == NULL)
exit(1);
else
{
//Primera línea del archivo
printf("%s",fgets(linea,100,archivo));
//sscanf(linea,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s\n",linea)
// Reemplazar coma por tabulador en linea
linea[99]=0;
i=0;
while(linea[i] != 0){
if(linea[i]==',') linea[i]='\t';
i++;
}
printf("\nEl contenido del archivo de prueba es \n\n");
//Primera línea del archivo despues de adicionar tabuladoras
printf("%s",linea);
//Acá ya se leyo la primera línea o encabezado del archivo
//Ahora si se leen las líneas de los datos
i=1;
fgets(linea,100,archivo);
while (feof(archivo) == 0)
{
//sscanf(linea,"%d,%d,%[^,],%[^,],%f,%f,%s\n",&numero[i],&id[i],nombre[i],apellidos[i],&altura[i],&peso[i],sexo[i]);
numero[i]=atoi(strtok(linea, delimiter));
id[i] = atoi(strtok(NULL, delimiter));
strcpy(nombre[i],strtok(NULL, delimiter));
strcpy(apellidos[i], strtok(NULL, delimiter));
altura[i] = atof(strtok(NULL, delimiter));
peso[i] = atof(strtok(NULL, delimiter));
strcpy(sexo[i], strtok(NULL, "\n"));
str_size=strlen(linea);
printf("%2d\t%10d\t%-20s\t%-20s\t%.2f\t%.0f\t%-9s\n",numero[i],id[i],nombre[i],apellidos[i],altura[i],peso[i],sexo[i]);
fgets(linea,100,archivo);
i++;
}
//system(pause);
}
fclose(archivo);
return 0;
}
----------------------------------------------
----------------------------------------------
El resultado en consola es:
----------------------------------------------
----------------------------------------------
clang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)
clang-7 -pthread -lm -o main main.c
./main
#,ID,Nombre,Apellidos,Altura,Peso,Sexo
El contenido del archivo de prueba es
# ID Nombre Apellidos Altura Peso Sexo
1 1007108199 Carlos Londo�o 1.70 63 Masculino
2 1017269056 Santiago Suarez 1.71 70 Masculino
3 1193131583 Juli�n Zapata Guti�rrez 1.70 80 Masculino
4 1234643466 Juan Sebastian Rodriguez Cardona 1.70 65 Masculino
5 1017180877 Hector Ramirez 1.72 68 masculino
6 1035922621 Sebastian Molina 1.81 78 Masculino
7 1193275962 Juan Ossa 1.66 60 Masculino
8 1020487219 Luis �ngel Ram�rez 1.76 68 Masculino
9 1035442744 Cristian david Montes casta�o 1.82 71 Masculino
10 1017225274 John Estrada 1.77 76 Masculino
11 1039473649 Bryan Ortiz 1.75 70 Masculino
12 1005856597 Helian Moreno 1.74 65 Masculino
13 1001236309 Mateo L�pez P�rez 1.86 83 Masculino
14 1017271133 Sebastian Arboleda Martinez 1.78 65 Masculino
15 1001233950 Juan Fernando Arboleda 1.71 65 Masculino
16 43221494 Astrid Arboleda 1.70 52 Femenino
17 1003291166 Andres Mendoza Gonzalez 1.75 66 Masculino
18 1005679318 Alex Baldovino 1.78 70 masculino
19 1020467588 Cristian Cabrera 1.78 70 Masculino
20 1035441229 Sebastian Cuencar Cardona 1.75 68 Masculino
21 1018352086 Maria Yeniffer Arango Montoya 1.56 57 Femenino
22 1001741212 jose ricardo palacio rios 1.71 63 Masculino
23 1152472402 Julian Mateo Nore�a Ramirez 1.76 84 Masculino
24 1002065482 Diego Fernando Taborda Arango 1.71 86 Masculino
25 1039475603 Valentina Arredondo 1.75 58 Femenino
26 1027888770 Andres Ferney Buitrago Suarez 1.81 72 Maculino
27 1000869689 Daniel Alexander Serna Eusse 1.68 57 Masculino
28 1193069203 Jair Armando Camacho Bonilla 1.78 62 Masculino
29 1017265093 Jhonny Hernandez 1.67 53 Masculino
30 18253192 Santiago Uribe 1.71 90 Masculino
^C
No hay comentarios:
Publicar un comentario