forked from kennedyufersa/hashTable
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lerArquivos.cpp
116 lines (105 loc) · 3.25 KB
/
lerArquivos.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h> // Ler e Inserir dados
#include <stdlib.h> // Operações de prompt
#include <string> // Auxiliar com caracteres
#include "cidade.cpp" // Estrutura da cidade
#define MAX 5570
// Funções
dataItem *getItens(cidade *cities, gps *local);
cidade *getCidades(char *arquivo);
gps *getGps(char *localizacoes);
void printData(dataItem *dado);
/**
* @brief Recebe as Estruturas City e Gps, e retorna uma estrutura dataItem
* @param cities
* @param local
* @return dataItem*
*/
dataItem *getItens(cidade *cities, gps *local) {
// Cria um dataItem do tamanho MAX
dataItem *dados = (dataItem *)malloc(MAX * sizeof(dataItem));
int k = 0;
// Organiza as estruturas que foram recebidas com base no id
for (size_t i = 0; i < MAX; i++) {
dados[k].key = cities[i].id;
for (size_t j = 0; j < MAX; j++) {
if (cities[i].id == local[j].id) {
dados[k].city = cities[i];
dados[k].GPS = local[j];
k++;
break;
}
}
}
return dados;
}
/**
* @brief Lê o arquivo passado como parametro e retorna uma estrutura City
* @param arquivo
* @return cidade*
*/
cidade *getCidades(char *arquivo) {
// Abre o arquivo
FILE *f = fopen(arquivo, "r");
cidade *cidades = (cidade *)malloc(MAX * sizeof(cidade));
// Informa se o arquivo não for aberto
if (!f) {
perror("Arquivo Legenda não encontrado!\n");
return NULL;
}
// Limpa a primeira linha de leitura do arquivo
fscanf(f, "CODIGO MUNICIPIO;UF;NOME MUNICIPIO");
unsigned int cod;
char *uf;
char *cid;
int i = 0;
// Percore o arquivo salvando as informações
while (!feof(f)) {
uf = (char *)malloc(2 * sizeof(char));
cid = (char *)malloc(40 * sizeof(char));
fscanf(f, "%d %s ", &cod, uf);
fgets(cid, 40 * sizeof(char), f);
//printf("%d %s %s", cod, uf, cid);
cidades[i].id = cod; // ID da cidade
cidades[i].estado = uf; // Estado
cidades[i].cidade = cid; // Cidade
i++;
}
return cidades; // Retorna a estrutura
}
/**
* @brief Lê o arquivo passado como parametro e retorna uma estrutura Gps
* @param localizacoes
* @return gps*
*/
gps *getGps(char *localizacoes) {
// Abre o arquivo
FILE *f = fopen(localizacoes, "r");
gps *local = (gps *)malloc(MAX * sizeof(gps));
// Informa se o arquivo não for aberto
if (!f) {
perror("Arquivo Coordenadas nao encontrado!\n");
return NULL;
}
// Limpa a primeira linha de leitura do arquivo
fscanf(f, "CODIGO MUNICIPIO;LATITUDE;LONGITUDE");
unsigned int cod;
latitude la;
longitude lo;
int i = 0;
// Percore o arquivo salvando as informações
while (!feof(f)) {
fscanf(f, "%u;%f;%f", &cod, &la, &lo);
//printf("%u;%.2f;%.2f\n", cod, la, lo);
local[i].id = cod; // Id do local
local[i].la = la; // Latitude
local[i].lo = lo; // Longitude
i++;
}
return local;
}
// Imprime uma estrutura dataItem
void printData(dataItem *dado){
for (int i = 0; i < MAX; i++) {
printf("%d -> %d %s %s %.2f %.2f\n\n\n", i, dado[i].key, dado[i].city.cidade, dado[i].city.estado, dado[i].GPS.la, dado[i].GPS.lo);
}
}