Программа на C для чтения файла CSV с fscanf и форматирования чисел в atoi и atof
En este post teenmos:
- Archivo CSV
- Archivo en C con fscanf y formateo con atoi y atof para los numeros
- 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:
----------------------------------------------
----------------------------------------------
/* clase158.c
Description: Read a CSV File and show output with fscanf
Casí igual al calse155.c, este es un paso intermedio a ahcer la aplicación más eficiente
Donde se deben saber los caractreres ingresados por el usuario, es decir lo máximo
que se le dejo en las cajas de entrada de los strings str
Autor: Alexander Arias
Date: April 13, 2020
*/
#include <stdio.h>
#include <stdlib.h> // para atoi y atof
#define NUMFILAS 31
int main(void) {
FILE *archivo;
char n_str[NUMFILAS][4],ID_str[NUMFILAS][11],Nombre[NUMFILAS][31],Apellidos[NUMFILAS][31],Altura_str[NUMFILAS][7],Peso_str[NUMFILAS][5],Sexo[NUMFILAS][10];
int n[NUMFILAS], ID[NUMFILAS];
float Altura[NUMFILAS], Peso[NUMFILAS];
float f;
int i;
printf("Programa para leer un Archivo CSV\n");
archivo = fopen("2019-1 Archivo Clase 52.csv","r");
//Adicionar caracter nulo al final de cada cadena
for(i=0;i<NUMFILAS;i++){
n_str[i][3]=0;
ID_str[i][10]=0;
Nombre[i][30]=0;
Apellidos[i][30]=0;
Altura_str[i][6]=0;
Peso_str[i][4]=0;
Sexo[i][9]=0;
}
fscanf(archivo,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s\n",n_str[0],ID_str[0],Nombre[0],Apellidos[0],Altura_str[0],Peso_str[0],Sexo[0]);
printf("%s\n",n_str[0]);
printf("%s\n",ID_str[0]);
printf("%s\n",Nombre[0]);
printf("%s\n",Apellidos[0]);
printf("%s\n",Altura_str[0]);
printf("%s\n",Peso_str[0]);
printf("%s\n",Sexo[0]);
printf("%2s\t%10s\t%-20s\t%-20s\t%6s\t%4s\t%-9s\n",n_str[0],ID_str[0],Nombre[0],Apellidos[0],Altura_str[0],Peso_str[0],Sexo[0]);
for(i=1;i<NUMFILAS;i++){
fscanf(archivo,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s\n",n_str[i],ID_str[i],Nombre[i],Apellidos[i],Altura_str[i],Peso_str[i],Sexo[i]);
//conversión de los que son numeros
// se debe incluir stdli.h para atoi y atof
n[i]=atoi(n_str[i]);
ID[i]=atoi(ID_str[i]);
Altura[i]=atof(Altura_str[i]);
Peso[i]=atof(Peso_str[i]);
}
/*
for(i=0;i<NUMFILAS;i++){
printf("%2s\t%10s\t%-20s\t%-20s\t%6s\t%4s\t%-9s\n",n_str[i],ID_str[i],Nombre[i],Apellidos[i],Altura_str[i],Peso_str[i],Sexo[i]);
}
*/
for(i=1;i<NUMFILAS;i++){
printf("%2d\t%10d\t%-20s\t%-20s\t%6.2f\t%4.0f\t%-9s\n",n[i],ID[i],Nombre[i],Apellidos[i],Altura[i],Peso[i],Sexo[i]);
}
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
Programa para leer un Archivo CSV
#
ID
Nombre
Apellidos
Altura
Peso
Sexo
# 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
No hay comentarios:
Publicar un comentario