1
I’m doing an activity (Develop a program in C language that reads this dataset (CSV) and sort it based on the first column.) where I have to read a CSV file, and have to sort using Bubblesort, the problem is that when I put it to print it just prints the first column and the rest not. Could you look at my code and tell me where I went wrong?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#define BSIZE 1000
typedef struct registro
{
int id_veiculo;
char placa[30];
char denominacao[300];
int id_marca_produto;
int id_cor_veiculo;
int ano_fabricacao;
int id_categoria_veiculo;
int id_unidade;
char data_aquisicao[30];
}registro;
registro dados [1024];
void process_field(int field_count, char *value,int i)
{
if (field_count == 0)
{
//strcpy(dados[i].grupo,value);
dados[i].id_veiculo = atoi(value);
}
if (field_count == 1)
{
strcpy(dados[i].placa,value);
//dados[i].lider = atof(value);
}
if (field_count == 2)
{
strcpy(dados[i].denominacao,value);
//dados[i].area = atof(value);
}
if (field_count == 3)
{
dados[i].id_marca_produto = atoi(value);
}
if (field_count == 4)
{
dados[i].id_cor_veiculo = atoi(value);
}
if (field_count == 5)
{
dados[i].ano_fabricacao = atoi(value);
}
if (field_count == 6)
{
dados[i].id_categoria_veiculo = atoi(value);
}
if (field_count == 7)
{
dados[i].id_unidade = atoi(value);
}
if (field_count == 8)
{
strcpy(dados[i].data_aquisicao,value);
//dados[i].ano = atoi(value);
}
}
void imprimir (int row_count)
{
int i;
for(i=0; i <= row_count-2; i++)
{
setlocale(LC_ALL, "Portuguese");
printf("Id Veiculo:\t\t %d\n",dados[i].id_veiculo);
printf("Placa:\t\t %s\n",dados[i].placa);
printf("Denominação:\t\t %s\n",dados[i].denominacao);
printf("Id Marca Produto:\t\t %d\n",dados[i].id_marca_produto);
printf("Id Cor veiculo:\t\t %d\n",dados[i].id_cor_veiculo);
printf("Ano fabricação:\t\t %d\n",dados[i].ano_fabricacao);
printf("Id Categoria Veiculo:\t\t %d\n",dados[i].id_categoria_veiculo);
printf("Id Unidade:\t\t %d\n",dados[i].id_unidade);
printf("Data aquisição:\t\t %s\n",dados[i].data_aquisicao);
printf("\n");
}
}
//fun��o gen�rica de troca de valores//
void troca (registro* a, registro* b)
{
registro tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
//Aplicar m�todo de ordena��o bubblleSort//
int bubbleSort(registro vec[], int TAM)
{
int i, j, tmp;
for(i = 0; i < TAM; i++)
{
for(j = i+1; j < TAM; j++)
{
if (vec[i].id_veiculo > vec[j].id_veiculo)
{
troca (&vec[i],&vec[j]);
}
}
}
}
int main(void)
{
setlocale(LC_ALL, "Portuguese");
char buf[1024];
char token[1024];
int row_count = 0;
int field_count = 0;
int in_double_quotes = 0;
int token_pos = 0;
int i = 0;
FILE *fp = fopen("frota_de_veiculo.csv", "r");
if (!fp)
{
printf("Can't open frota_de_veiculo\n");
return 0;
}
while (fgets(buf, 1024, fp))
{
row_count++;
if (row_count == 1)
{
continue;
}
field_count = 0;
i = 0;
do
{
token[token_pos++] = buf[i];
if (!in_double_quotes && (buf[i] == ';' || buf[i] == '\n'))
{
token[token_pos - 1] = 0;
token_pos = 0;
process_field(field_count++, token,row_count-2);
}
if (buf[i] == '"' && buf[i + 1] != '"')
{
token_pos--;
in_double_quotes = !in_double_quotes;
}
if (buf[i] == '"' && buf[i + 1] == '"')
i++;
} while (buf[++i]);
printf("\n");
}
printf("Desordenado:\n\n");
imprimir(row_count);
printf("\n\n");
bubbleSort(dados,row_count-1);
printf("Metodo BubbleSort:\n\n");
imprimir(row_count);
printf("\n\n");
fclose(fp);
return 0;
}