The impression is not coming out the right way

Asked

Viewed 25 times

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;
}

inserir a descrição da imagem aqui

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.