int cw_league_read(CWLeague *rosterList, FILE *file) { char buf[256], *team_id, *league, *city, *nickname; rewind(file); while (!feof(file)) { strcpy(buf, ""); if (fgets(buf, 256, file) == NULL) { return 0; } team_id = cw_strtok(buf); league = cw_strtok(NULL); city = cw_strtok(NULL); nickname = cw_strtok(NULL); if (!team_id || !league || !city || !nickname) { continue; } cw_league_roster_append(rosterList, cw_roster_create(team_id, 0, league, city, nickname)); } return 1; }
static int cw_scorebook_read_comments(CWScorebook *scorebook, FILE *file) { while (1) { char buf[256], *tok, *com; if (fgets(buf, 256, file) == NULL) { return 0; } tok = cw_strtok(buf); com = cw_strtok(NULL); if (tok && !strcmp(tok, "com") && com) { CWComment *comment = (CWComment *) malloc(sizeof(CWComment)); comment->text = (char *) malloc(sizeof(char) * (strlen(com) + 1)); strcpy(comment->text, com); comment->prev = scorebook->last_comment; comment->next = NULL; if (scorebook->first_comment == NULL) { scorebook->first_comment = comment; } else { scorebook->last_comment->next = comment; } scorebook->last_comment = comment; } else { return 1; } } }
int cw_roster_read(CWRoster *roster, FILE *file) { char buf[256], *player_id, *last_name, *first_name, *bats, *throws; rewind(file); while (!feof(file)) { strcpy(buf, ""); if (fgets(buf, 256, file) == NULL) { return 0; } player_id = cw_strtok(buf); last_name = cw_strtok(NULL); first_name = cw_strtok(NULL); bats = cw_strtok(NULL); throws = cw_strtok(NULL); if (!player_id || !last_name || !first_name || !bats || !throws) { continue; } /* TODO: Some Retrosheet roster files have additional fields * at the end. Preserve these (and write them out in cw_roster_write() ). */ cw_roster_player_append(roster, cw_player_create(player_id, last_name, first_name, bats[0], throws[0])); } return 1; }
CWGame * cw_game_read(FILE *file) { char buf[1024], *tok; fpos_t filepos; char batHand = ' ', batHandBatter[1024], pitHand = ' ', pitHandPitcher[1024]; int ladjAlign = 0, ladjSlot = 0; CWGame *game; if (fgets(buf, 1024, file) == NULL) { return NULL; } tok = cw_strtok(buf); if (tok && !strcmp(tok, "id")) { char *game_id = cw_strtok(NULL); if (game_id) { game = cw_game_create(game_id); } else { return NULL; } } else { return NULL; } while (!feof(file)) { fgetpos(file, &filepos); if (fgets(buf, 1024, file) == NULL) { if (feof(file)) { break; } else { if (game) { cw_game_cleanup(game); free(game); } return NULL; } } if (feof(file)) { break; } tok = cw_strtok(buf); if (!tok || !strcmp(tok, "id")) { fsetpos(file, &filepos); break; } else if (!strcmp(tok, "version")) { char *version; version = cw_strtok(NULL); if (version) { cw_game_set_version(game, version); } } else if (!strcmp(tok, "info")) { char *field, *value; field = cw_strtok(NULL); value = cw_strtok(NULL); if (field) { cw_game_info_append(game, field, (value) ? value : ""); } } else if (!strcmp(tok, "start")) { char *player_id, *name, *team, *slot, *pos; player_id = cw_strtok(NULL); name = cw_strtok(NULL); team = cw_strtok(NULL); slot = cw_strtok(NULL); pos = cw_strtok(NULL); if (player_id && name && team && slot && pos) { cw_game_starter_append(game, player_id, name, atoi(team), atoi(slot), atoi(pos)); } } else if (!strcmp(tok, "play")) { char *inning, *batting_team, *batter, *count, *pitches, *play; inning = cw_strtok(NULL); batting_team = cw_strtok(NULL); batter = cw_strtok(NULL); count = cw_strtok(NULL); pitches = cw_strtok(NULL); play = cw_strtok(NULL); if (inning && batting_team && batter && count && pitches && play) { cw_game_event_append(game, atoi(inning), atoi(batting_team), batter, count, pitches, play); } if (batHand != ' ' && !strcmp(batHandBatter, batter)) { game->last_event->batter_hand = batHand; } else { /* Once batter changes, clear this out */ batHand = ' '; strcpy(batHandBatter, ""); } if (pitHand != ' ') { game->last_event->pitcher_hand = pitHand; game->last_event->pitcher_hand_id = (char *) malloc(strlen(pitHandPitcher)+1); strcpy(game->last_event->pitcher_hand_id, pitHandPitcher); pitHand = ' '; strcpy(pitHandPitcher, ""); } if (ladjSlot != 0) { game->last_event->ladj_align = ladjAlign; game->last_event->ladj_slot = ladjSlot; ladjAlign = 0; ladjSlot = 0; } } else if (!strcmp(tok, "sub")) { char *player_id, *name, *team, *slot, *pos; player_id = cw_strtok(NULL); name = cw_strtok(NULL); team = cw_strtok(NULL); slot = cw_strtok(NULL); pos = cw_strtok(NULL); if (player_id && name && team && slot && pos) { cw_game_substitute_append(game, player_id, name, atoi(team), atoi(slot), atoi(pos)); } } else if (!strcmp(tok, "com")) { char *comment; comment = cw_strtok(NULL); if (comment) { cw_game_comment_append(game, comment); } } else if (!strcmp(tok, "data")) { char *data[256]; int i; for (i = 0; i < 256; i++) { data[i] = cw_strtok(NULL); if (!data[i]) { cw_game_data_append(game, i, data); break; } } } else if (!strcmp(tok, "stat")) { char *data[256]; int i; for (i = 0; i < 256; i++) { data[i] = cw_strtok(NULL); if (!data[i] || isspace(data[i][0])) { cw_game_stat_append(game, i, data); break; } } } else if (!strcmp(tok, "event")) { char *data[256]; int i; for (i = 0; i < 256; i++) { data[i] = cw_strtok(NULL); if (!data[i] || isspace(data[i][0])) { cw_game_evdata_append(game, i, data); break; } } } else if (!strcmp(tok, "line")) { char *data[256]; int i; for (i = 0; i < 256; i++) { data[i] = cw_strtok(NULL); if (!data[i] || data[i][0] == '\0') { cw_game_line_append(game, i, data); break; } } } else if (!strcmp(tok, "badj")) { char *batter, *bats; batter = cw_strtok(NULL); bats = cw_strtok(NULL); if (batter && bats) { strncpy(batHandBatter, batter, 255); batHand = bats[0]; } } else if (!strcmp(tok, "padj")) { char *pitcher, *throws; pitcher = cw_strtok(NULL); throws = cw_strtok(NULL); if (pitcher && throws) { strncpy(pitHandPitcher, pitcher, 255); pitHand = throws[0]; } } else if (!strcmp(tok, "ladj")) { char *align, *slot; align = cw_strtok(NULL); slot = cw_strtok(NULL); if (align && slot) { ladjAlign = atoi(align); ladjSlot = atoi(slot); } } } return game; }