lunes, 13 de abril de 2020

clase156.c Programa en C para leer un archivo CSV con fgets por linea y formateo de variables con sscanf - Программа на C для чтения файла CSV с fgets в строке и форматированием переменных с помощью sscanf

Programa en C para leer un archivo CSV con fgets por linea y formateo de variables con sscanf

Программа на C для чтения файла CSV с fgets в строке и форматированием переменных с помощью sscanf


En este post teenmos:
- Archivo CSV
- Archivo en C con fgets y formateo con sscanf
- 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:
----------------------------------------------
----------------------------------------------

/* clase156.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];

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]);
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


No hay comentarios:

Publicar un comentario