#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; }