diff --git a/tps/fonte/jogador.c b/tps/fonte/jogador.c new file mode 100644 index 0000000..cd08b62 --- /dev/null +++ b/tps/fonte/jogador.c @@ -0,0 +1,93 @@ +#include +#include +#include + +#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; +}