Estou muito perdido na hora de passar a struct para a ordenação do MERGE e imprimir os dados da struct de forma cresente da variavel ( int ideTipoEmpreendimentoOperacao ).
Gostaria de imprimir na tela o arquivo ordenado (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)...
Arquivo lido... DESORD_10POS_11LIN.csv
ideTipoEmpreendimentoOperacao,nomTipoEmpreendimento,sigEmpreendimento,qtdEmpreendimento,mdaPotenciaInstaladakW,mesReferencia,anoReferencia,dthProcessamento
10,Central Geradora Hidrelétrica,CGH,0,0.00,12,2001,13/09/2017 00:00:00
9,Central Geradora Hidrelétrica,CGH,144,78400.00,12,2002,13/09/2017 00:00:00
8,Central Geradora Hidrelétrica,CGH,159,86510.00,12,2003,13/09/2017 00:00:00
7,Central Geradora Hidrelétrica,CGH,171,90050.00,12,2004,13/09/2017 00:00:00
6,Central Geradora Hidrelétrica,CGH,188,99300.00,12,2005,13/09/2017 00:00:00
5,Central Geradora Hidrelétrica,CGH,202,106772.00,12,2006,13/09/2017 00:00:00
4,Central Geradora Hidrelétrica,CGH,215,112258.00,12,2007,13/09/2017 00:00:00
3,Central Geradora Hidrelétrica,CGH,276,153400.00,12,2008,13/09/2017 00:00:00
2,Central Geradora Hidrelétrica,CGH,307,173400.00,12,2009,13/09/2017 00:00:00
1,Central Geradora Hidrelétrica,CGH,327,186120.00,12,2010,13/09/2017 00:00:00
Meu código...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
typedef struct TipoEmpreendimentoOperacao {
int ideTipoEmpreendimentoOperacao;
char nomTipoEmpreendimento[100];
char sigEmpreendimento[10];
int qtdEmpreendimento;
float mdaPotenciaInstaladakW;
int mesReferencia;
int anoReferencia;
char dthProcessamento[30];
};
struct TipoEmpreendimentoOperacao usinas[11];
int main(){
setlocale(LC_ALL, "Portuguese");
printf("Arqivo original\n");
imprimir(usinas, tam);
merge(usinas,0,tam-1);
imprimir(usinas, tam);*/
int tam = 11;
FILE *arquivo = fopen("DESORD_10POS_11LIN.csv", "r");
if (!arquivo) {
printf("Não é possível abrir o arquivo\n");
return 0;
}
char buf[1024];
int cont_linhas = 0;
int contador = 0, it = 0;
char trans_arq[1024];
while (fgets(buf, 1024, arquivo)) {
contador = 0;
cont_linhas++;
if (cont_linhas == 1) {
continue;
}
char *campo = strtok(buf, ",");
while (campo) {
if (contador == 0) {//int
strcpy(trans_arq, campo);
usinas[contador].ideTipoEmpreendimentoOperacao = atoi(trans_arq);
}
if (contador == 1) {//char
strcpy(trans_arq, campo);
strcpy(usinas[contador].nomTipoEmpreendimento, trans_arq);
}
if (contador == 2) {//char
strcpy(trans_arq, campo);
strcpy(usinas[contador].sigEmpreendimento, trans_arq);
}
if (contador == 3) {//int
strcpy(trans_arq, campo);
usinas[contador].qtdEmpreendimento = atoi(trans_arq);
}
if (contador == 4) {//float
strcpy(trans_arq, campo);
usinas[contador].mdaPotenciaInstaladakW = atof(trans_arq);
}
if (contador == 5) {//int
strcpy(trans_arq, campo);
usinas[contador].mesReferencia = atoi(trans_arq);
}
if (contador == 6) {//int
strcpy(trans_arq, campo);
usinas[contador].anoReferencia = atoi(trans_arq);
}
if (contador == 7) {//char
strcpy(trans_arq, campo);
strcpy(usinas[contador].dthProcessamento, trans_arq);
}
printf("Arqivo original\n");
imprimir(usinas[contador].ideTipoEmpreendimentoOperacao, tam);
merge(usinas[contador].ideTipoEmpreendimentoOperacao,0,tam-1);
imprimir(usinas[contador].ideTipoEmpreendimentoOperacao, tam);
campo = strtok(NULL, ",");//separa o texto a cada virgula
contador++;
}
}
fclose(arquivo);
return 0;
}
void intercala(int *x, int inicio, int fim, int meio){
int poslivre, inicio_v1, inicio_v2, i;
int aux[fim];
inicio_v1 = inicio;
inicio_v2 = meio+1;
poslivre = inicio;
while (inicio_v1 <= meio && inicio_v2 <= fim){
if (x[inicio_v1] <= x[inicio_v2]){
aux[poslivre] = x[inicio_v1];
inicio_v1 += 1;
}else{
aux[poslivre] = x[inicio_v2];
inicio_v2 += 1;
}
poslivre++;
}
for (i = inicio_v1; i <= meio; i++){
aux[poslivre] = x[i];
poslivre++;
}
for (i = inicio_v2; i <= fim; i++){
aux[poslivre] = x[i];
poslivre++;
}
for (i = inicio; i <= fim; i++)
x[i] = aux[i];
}
void merge(int *x, int inicio, int fim){
int meio;
if (inicio < fim){
meio = (inicio+fim)/2;
merge(x,inicio,meio);
merge(x,meio+1, fim);
intercala(x,inicio, fim, meio);
}
}
void imprimir(int *x , int n){
int i;
for (i = 0; i < n; i++){
printf("%d ", x[i]);
}
printf("\n");
}