lunes, 13 de abril de 2020

clase158.c Programa en C para leer un archivo CSV con fscanf y formateo a numeros con atoi y atof Программа на C для чтения файла CSV с fscanf и форматирования чисел в atoi и atof

Programa en C para leer un archivo CSV con fscanf y formateo a numeros con atoi y atof

Программа на 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,Masculino
2,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:
----------------------------------------------
----------------------------------------------

/* 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