aeds2/tps/fonte/jogador.c

94 lines
2.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM_MAX_LINHA 250
typedef struct {
int id;
int peso;
int altura;
char nome[70];
char universidade[70];
char anoNascimento[7];
char cidadeNascimento[70];
char estadoNascimento[70];
} Jogador;
/**
* Se linha = "65,Joe Graboski,201,88,,1930,,"
* então
* novaLinha = "65,Joe Graboski,201,88,nao informado,1930,nao informado,nao informado"
*
* @param linha String com a linha do CSV.
* @param novaLinha String que receberá uma nova linha com os campos vazios
* preenchidos.
*/
void inserirNaoInformado(char *linha, char *novaLinha) {
int tam = strlen(linha);
for (int i = 0; i <= tam; i++, linha++) {
*novaLinha++ = *linha;
if (*linha == ',' && (*(linha + 1) == ',' || *(linha + 1) == '\0')) {
strcpy(novaLinha, "nao informado");
novaLinha += strlen("nao informado");
}
}
}
void tirarQuebraDeLinha(char linha[]) {
int tam = strlen(linha);
if (linha[tam - 2] == '\r' && linha[tam - 1] == '\n') // Linha do Windows
linha[tam - 2] = '\0'; // Apaga a linha
else if (linha[tam - 1] == '\r' || linha[tam - 1] == '\n') // Mac ou Linux
linha[tam - 1] = '\0'; // Apaga a linha
}
/**
* @param jogador Ponteiro para o jogador a receber os dados
* @param linha Linha do CSV. Ex.: "65,Joe Graboski,201,88,,1930,,"
*/
void ler(Jogador *jogador, char linha[]) {
char novaLinha[TAM_MAX_LINHA];
tirarQuebraDeLinha(linha);
inserirNaoInformado(linha, novaLinha);
jogador->id = atoi(strtok(novaLinha, ","));
strcpy(jogador->nome, strtok(NULL, ","));
jogador->altura = atoi(strtok(NULL, ","));
jogador->peso = atoi(strtok(NULL, ","));
strcpy(jogador->universidade, strtok(NULL, ","));
strcpy(jogador->anoNascimento, strtok(NULL, ","));
strcpy(jogador->cidadeNascimento, strtok(NULL, ","));
strcpy(jogador->estadoNascimento, strtok(NULL, ","));
}
void imprimir(Jogador *jogador) {
printf("[%d ## %s ## %d ## %d ## %s ## %s ## %s ## %s]\n",
jogador->id,
jogador->nome,
jogador->altura,
jogador->peso,
jogador->anoNascimento,
jogador->universidade,
jogador->cidadeNascimento,
jogador->estadoNascimento
);
}
Jogador clone(Jogador *jogador) {
Jogador retorno;
retorno.id = jogador->id;
strcpy(retorno.nome, jogador->nome);
retorno.altura = jogador->altura;
retorno.peso = jogador->peso;
strcpy(retorno.anoNascimento, jogador->anoNascimento);
strcpy(retorno.universidade, jogador->universidade);
strcpy(retorno.cidadeNascimento, jogador->cidadeNascimento);
strcpy(retorno.estadoNascimento, jogador->estadoNascimento);
return retorno;
}