- ~#include "genericLL.h"
- #include "genericHash.h"
- #include "user.h"
- #include "lugar.h"
- #define MAX_LINHA_LUGAR 150
- #define MAX_LINHA_USER 350
- void limpabuff() {
- int flush;
- while ((flush=getchar()) != EOF && flush != '\n');
- }
- // Dada a posição no inicio da linha do ficheiro, insere um utilizador na hash de utilizadores
- // 9000011000,Jon Yang,9000011000@foursquareUM.com,3761 N. 14th St
- int carrega_users(FILE *fp, Hash *hash){
- /* Utilizar fora desta função
- if ((fp = fopen("utilizadoresFSQ_UM.csv", "r")) == NULL)
- fprintf(stderr, "Cannot open %s\n", "utilizadoresFSQ_UM.csv");
- */
- Lista *aux;
- User *user = (User*) malloc(sizeof(User));
- char linha[MAX_LINHA_USER];
- user = NULL;
- while(!feof(fp)){
- fgets(linha, MAX_LINHA_USER, fp);
- user = cria_user(linha);
- if((*hash)[fhash(user -> nickname)] == NULL ){
- aux = init(sizeof(user), &comparatorUsers);
- init_hash_list(hash, aux, user -> nickname);
- insere_hash(hash, aux, user, user -> nickname);
- }else{
- insere_hash(hash, aux, user, user -> nickname);
- }
- }
- return 1;
- }
- // Dada a posição no inicio da posição no inicio da linha do ficheiro, insere um lugar na hash de lugares
- // 1:Praia de Porto Chão:39.4:-9.25:(acrescentar pontos)
- int carrega_lugares(FILE *fp, Hash *hash){
- /* Utilizar fora desta função
- if ((fp = fopen("coordenadas.txt", "r")) == NULL)
- fprintf(stderr, "Cannot open %s\n", "coordenadas.txt");
- */
- Lista *aux;
- Lugar *lugar = (Lugar*) malloc(sizeof(Lugar));
- char linha[MAX_LINHA_LUGAR], buffer[10];
- int flush;
- printf("Premir para carregar lugares\n");
- getchar();
- while(fgets(linha, MAX_LINHA_LUGAR, fp)!= NULL/*!feof(fp)*/){
- printf("->%s<- \n",linha);
- //printf("%s\n",linha);
- lugar = cria_lugar(lugar, linha);
- sprintf(buffer, "%d", lugar -> codigo);
- if((*hash)[fhash(buffer)] == NULL ){
- aux = init(sizeof(Lugar), &comparatorLugares);
- init_hash_list(hash, aux, buffer);
- insere_hash(hash, aux, lugar, buffer);
- }
- else{
- insere_hash(hash, aux, lugar, buffer);
- }
- printf("PROCURA:%d\n",procura((*hash)[fhash(buffer)],lugar));
- printf("->%s<-\n",lugar->nome);
- limpabuff();
- }
- return 1;
- }
- /*
- // Dada a posição no inicio da linha do ficheiro, insere uma relação de amizade no grafo de amigos
- int carrega_amigos(FILE *fp, Grafo *g){
- return 1;
- }
- // Dada a posição no inicio da linha do ficheiro, insere uma relação de lugares no grafo de lugares
- int carrega_caminhos(FILE *fp, Grafo *g){
- return 1;
- }*/
- /*
- // Dado o ficheiro e o grafo de amigos, insere todas as relações de amizade num ficheiro
- int guardar_amigos(FILE *fp, Grafo *g){
- return 1;
- }
- // Dado o ficheiro e o grafo de lugares, insere todas as relações de lugares num ficheiro
- int guardar_lug_adj(FILE *fp, Grafo *g){
- return 1;
- }*/
- // Dado o ficheiro e a Hash de utilizadores, guarda a informação toda em ficheiro.
- int guardar_utilizadores(FILE *fp, Hash *hash){
- /* Utilizar fora desta função
- if ((fp = fopen("utilizadoresFSQ_UM.csv", "r")) == NULL)
- fprintf(stderr, "Cannot open %s\n", "utilizadoresFSQ_UM.csv");
- */
- Lista* lista_aux;// = (Lista *) malloc(sizeof(Lista));
- Nodo* nodo_aux;// = (Nodo *) malloc(sizeof(Nodo));
- User* user_aux;// = (User *) malloc(sizeof(User));
- int i = 0;
- char buffer[5];
- for(i = 0; i < HASH_SIZE; i++){
- lista_aux = (*hash)[i];
- nodo_aux = lista_aux -> root;
- user_aux = nodo_aux -> dados;
- while(nodo_aux != NULL){
- fputs(user_aux -> nickname, fp);
- fputs(",", fp);
- fputs(user_aux -> nome, fp);
- fputs(",", fp);
- fputs(user_aux -> email, fp);
- fputs(",", fp);
- fputs(user_aux -> morada, fp);
- fputs(",", fp);
- sprintf(buffer, "%d", user_aux -> pontos);
- fputs(buffer, fp);
- fputs("\n", fp);
- nodo_aux = nodo_aux -> proximo;
- }
- }
- purge_hash(hash);
- return 1;
- }
- int guardar_lugares(FILE *fp, Hash *hash){
- /* Utilizar fora desta função
- if ((fp = fopen("coordenadas.txt", "r")) == NULL)
- fprintf(stderr, "Cannot open %s\n", "coordenadas.txt");
- */
- Lista* lista_aux;// = (Lista *) malloc(sizeof(Lista));
- Nodo* nodo_aux;// = (Nodo *) malloc(sizeof(Nodo));
- Lugar* lugar_aux;// = (Lugar *) malloc(sizeof(Lugar));
- int i = 0;
- char buffer[5];
- for(i = 0; i < HASH_SIZE; i++){
- lista_aux = (*hash)[i];
- nodo_aux = lista_aux -> root;
- lugar_aux = nodo_aux -> dados;
- while(nodo_aux!= NULL){
- sprintf(buffer, "%d", lugar_aux -> codigo);
- fputs(buffer, fp);
- fputs(":", fp);
- fputs(lugar_aux -> nome, fp);
- fputs(":", fp);
- sprintf(buffer, "%d", lugar_aux -> latitude.graus);
- fputs(buffer, fp);
- fputs(".", fp);
- sprintf(buffer, "%d", lugar_aux -> latitude.minutos);
- fputs(buffer, fp);
- fputs(":", fp);
- sprintf(buffer, "%d", lugar_aux -> longitude.graus);
- fputs(buffer, fp);
- fputs(".", fp);
- sprintf(buffer, "%d", lugar_aux -> longitude.graus);
- fputs(buffer, fp);
- fputs(":", fp);
- sprintf(buffer, "%d", lugar_aux -> pontos_checkin);
- fputs(buffer, fp);
- fputs("\n", fp);
- nodo_aux = nodo_aux -> proximo;
- }
- }
- free(lugar_aux);
- free(nodo_aux);
- free(lista_aux);
- purge_hash(hash);
- return 1;
- }