Пример #1
0
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;
}
Пример #2
0
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;
    }
  }
}
Пример #3
0
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;
}
Пример #4
0
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;
}